如何才能告訴Prolog/CLPFD只使用一定數量的域作爲最後一個資源?Prolog域限制
E.g. :從0 ... 8的域。我希望Prolog只有在沒有其他選項時才使用0。我使用'down'選項進行標記,但分配了太多的0。
上下文:Hoo-Doo遊戲 - >生成8x8板解決方案,其中任何列,行或對角線的數字爲1-8而不重複(數獨)。必須使用兩個透明件(用0表示,可以在任何地方)以完成解決方案。
下面的代碼:
...
setDomain(H,BoardSize),
maplist(all_distinct,H),
IndexI is BoardSize - 1,
IndexJ is BoardSize - 2,
checkDiagonalsLR(H,IndexI,IndexJ,BoardSize), %calls the all_distinct
IndexJ2 is BoardSize - 1,
checkDiagonalsRL(H,1,IndexJ2,BoardSize), %calls the all_distinct
transpose(H,Columns), maplist(all_distinct,Columns),
useLabeling(Columns,BoardSize), printBoard(Columns).
useLabeling([],N).
useLabeling([H|T],N) :- labeling([down],H), useLabeling(T,N).
請將您的代碼添加到問題中。 –
剛剛添加的代碼 – user2884323