十一、数独求解
在聆郎在线数独随机截取一至尊题目如下:
用Lingo求解这道题
Lingo代码:
model:
sets:
row/1..9/;
col/1..9/;
num/1..9/;
var(row,col,num):x;
endsets
@for(col(j)for(num(k)sum(var(i,j,k):x)=1));!约束每一列填的数字不重复;
@for(row(i)for(num(k)sum(var(i,j,k):x)=1));!约束每一行填的数字不重复;
@for(row(i)for(col(j)sum(var(i,j,k):x)=1));!约束每一个格子必须填入数字;
!约束9个块里的数字不重复;
@for(num(k)sum(row(i)|i#ge#1#and#i#le#3:
@sum(col(j)|j#ge#1#and#j#le#3:x(i,j,k)))=1;
@sum(row(i)|i#ge#1#and#i#le#3:
@sum(col(j)|j#ge#4#and#j#le#6:x(i,j,k)))=1;
@sum(row(i)|i#ge#1#and#i#le#3:
@sum(col(j)|j#ge#7#and#j#le#9:x(i,j,k)))=1;
@sum(row(i)|i#ge#4#and#i#le#6:
@sum(col(j)|j#ge#1#and#j#le#3:x(i,j,k)))=1;
@sum(row(i)|i#ge#4#and#i#le#6:
@sum(col(j)|j#ge#4#and#j#le#6:x(i,j,k)))=1;
@sum(row(i)|i#ge#4#and#i#le#6:
@sum(col(j)|j#ge#7#and#j#le#9:x(i,j,k)))=1;
@sum(row(i)|i#ge#7#and#i#le#9:
@sum(col(j)|j#ge#1#and#j#le#3:x(i,j,k)))=1;
@sum(row(i)|i#ge#7#and#i#le#9:
@sum(col(j)|j#ge#4#and#j#le#6:x(i,j,k)))=1;
@sum(row(i)|i#ge#7#and#i#le#9:
@sum(col(j)|j#ge#7#and#j#le#9:x(i,j,k)))=1);
!已知的条件;
x(1,6,7)=1;x(1,7,4)=1;
x(2,1,3)=1;x(2,4,8)=1;x(2,9,1)=1;
x(3,5,6)=1;x(3,8,9)=1;
x(4,5,4)=1;x(4,8,7)=1;
x(5,3,5)=1;x(5,4,1)=1;x(5,9,2)=1;
x(6,6,9)=1;x(6,7,6)=1;
x(7,1,2)=1;x(7,3,3)=1;
x(8,2,6)=1;x(8,3,8)=1;x(8,4,5)=1;
x(9,1,5)=1;x(9,2,1)=1;x(9,9,3)=1;
@for(varbin(x));!0,1约束;
end
结果:
|