我想找到所有可能的3x3魔方。
魔方是一个不同数字的排列(即每个数字使用一次),通常是整数,在方格中,每行和每列中的数字,以及主对角线和次对角线中的数字,所有加起来相同的数字。
这是一个示例解决方案:
8 1 6
3 5 7
4 9 2
如何在不使用library(clpfd)
的情况下编写能够找到所有解决方案的Prolog程序?
答案 0 :(得分:3)
这是SWI-Prolog但不是clpfd的解决方案:
square(L) :-
setof(S, carre(S), L).
carre(L) :-
L = [[A, B, C],
[D, E, F],
[G, H, I]],
flatten(L, LF),
numlist(1,9, LN),
init(LF, LN),
15 is A + B + C,
15 is D + E + F,
15 is G + H + I,
15 is A + D + G,
15 is B + E + H,
15 is C + F + I.
init([H|T], L) :-
select(H, L, L1),
init(T, L1).
init([], []).