Подсчет количества раскрасок карты в прологе - PullRequest
3 голосов
/ 26 февраля 2012

В прологе мы можем получить решение проблемы раскраски карты следующим образом:

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

Можно ли подсчитать общее количество возможных раскрасок карты?

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

При использовании решения Андерса обратите внимание, что слово «раскраска» должно быть в нижнем регистре, что даст правильный ответ - 6 решений.

0 голосов
/ 26 февраля 2012

Да. findall / 3 будет перечислять все решения и (по крайней мере, в SWI-Prolog) aggregate_all / 3 может использоваться для подсчета:

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