prolog中映射着色的计数

prolog中映射着色的计数,prolog,combinatorics,Prolog,Combinatorics,在prolog中,我们可以得到地图着色问题的解决方案,如下所示: different(red, green). different(red, blue). different(green, red). different(green, blue). different(blue, red). different(blue, green). coloring(Alabama, Mississippi, Georgia, Tennessee, Florida) :- different(

在prolog中,我们可以得到地图着色问题的解决方案,如下所示:

different(red, green). different(red, blue). 
different(green, red). different(green, blue). 
different(blue, red). different(blue, green). 

coloring(Alabama, Mississippi, Georgia, Tennessee, Florida) :-
  different(Mississippi, Tennessee), 
  different(Mississippi, Alabama), 
  different(Alabama, Tennessee), 
  different(Alabama, Mississippi), 
  different(Alabama, Georgia), 
  different(Alabama, Florida), 
  different(Georgia, Florida), 
  different(Georgia, Tennessee). 

?- coloring(Alabama, Mississippi, Georgia, Tennessee, Florida).
Alabama = blue
Florida = green
Georgia = red
Mississippi = red
Tennessee = green
可以计算可能的贴图着色总数吗?

可以。将枚举所有解决方案,并且(至少在SWI Prolog中)可用于执行计数:

?- aggregate_all(count, Coloring(A,M,G,T,F), Num).
Num = 4711.

对于Anders解决方案,请注意“着色”一词应使用小写,这将给出正确答案-6种解决方案

aggregate_all(count, coloring(Alabama, Mississippi, Georgia, Tennessee, Florida), Count).
Count = 6.

得到4711没有意义。只有5^3种可能的组合,包括非法组合。我在上面运行的两台计算机都说6是答案。4711只是作为聚合输出的一个示例,我没有可用的prolog解释器来测试运行您的代码。:-)哦,很好。我没有疯。在看到这个答案之前,我刚刚发表了一条评论。