0

可能なすべての 3x3 魔方陣を見つけたいです。

英語のウィキペディアからの引用:

魔方陣は、各行と各列の数値、および主対角線と副対角線の数値をすべて加算した、正方格子内の個別の数値 (つまり、各数値が 1 回使用される) の配列であり、通常は整数です。同数まで。

1 つのサンプル ソリューションを次に示します。

8 1 6
3 5 7
4 9 2

を使用せずにすべてのソリューションを見つける Prolog プログラムを作成するにはどうすればよいlibrary(clpfd)ですか?

4

1 に答える 1

3

clpfd ではなく SWI-Prolog を使用したソリューションを次に示します。

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([], []).
于 2012-04-20T12:57:56.083 に答える