this repo has no description
1include "alldifferent.mzn"; 2 3int: S; 4int: N = S * S; 5int: digs = ceil(log(10.0,int2float(N))); % 输出的数字 6 7set of int: PuzzleRange = 1..N; 8set of int: SubSquareRange = 1..S; 9 10array[1..N,1..N] of 0..N: start; %% 板初始0 = 空 11array[1..N,1..N] of var PuzzleRange: puzzle; 12 13% 填充初始板 14constraint forall(i,j in PuzzleRange)( 15 if start[i,j] > 0 then puzzle[i,j] = start[i,j] else true endif ); 16 17% 每行中取值各不相同 18constraint forall (i in PuzzleRange) ( 19 alldifferent( [ puzzle[i,j] | j in PuzzleRange ]) ); 20 21% 每列中取值各不相同 22constraint forall (j in PuzzleRange) ( 23 alldifferent( [ puzzle[i,j] | i in PuzzleRange ]) ); 24 25% 每个子方格块中取值各不相同 26constraint 27 forall (a, o in SubSquareRange)( 28 alldifferent( [ puzzle[(a-1) *S + a1, (o-1)*S + o1] | 29 a1, o1 in SubSquareRange ] ) ); 30 31solve satisfy; 32 33output [ show_int(digs,puzzle[i,j]) ++ " " ++ 34 if j mod S == 0 then " " else "" endif ++ 35 if j == N then 36 if i != N then 37 if i mod S == 0 then "\n\n" else "\n" endif 38 else "" endif else "" endif 39 | i,j in PuzzleRange ] ++ ["\n"];