M=[lbk]0 2 0 9 0 7 0 3 0;
7 0 8 0 0 0 5 0 1;
0 3 0 1 0 8 0 2 0;
6 0 4 0 7 0 3 0 2;
0 0 0 4 0 3 0 0 0;
3 0 2 0 6 0 4 0 7;
0 5 0 7 0 4 0 8 0;
4 0 9 0 0 0 1 0 5;
0 7 0 6 0 5 0 4 0[rbk];
sudu(1,M)
function sudu(m,M)
i=ceil(m/9);
j=m-9*(i-1);
if m>81
disp(M);
return;
elseif M(i,j)~=0
sudu(m+1,M)
else
M1=M(3*(ceil(i/3)-1)+(1:3), 3*(ceil(j/3)-1)+(1:3));%i, j位于的宫格
for k=1:9
if ~any(diag(M)==k)&&~any(diag(flipud(M))==k)&&~any(M(:,j)==k)&&~any(M1(:)==k)&&~any(M(i, :)==k)
M(i,j)=k;
sudu(m+1, M);
end
end
end
end
为什么加了对角线不重复就运行不了?
7 0 8 0 0 0 5 0 1;
0 3 0 1 0 8 0 2 0;
6 0 4 0 7 0 3 0 2;
0 0 0 4 0 3 0 0 0;
3 0 2 0 6 0 4 0 7;
0 5 0 7 0 4 0 8 0;
4 0 9 0 0 0 1 0 5;
0 7 0 6 0 5 0 4 0[rbk];
sudu(1,M)
function sudu(m,M)
i=ceil(m/9);
j=m-9*(i-1);
if m>81
disp(M);
return;
elseif M(i,j)~=0
sudu(m+1,M)
else
M1=M(3*(ceil(i/3)-1)+(1:3), 3*(ceil(j/3)-1)+(1:3));%i, j位于的宫格
for k=1:9
if ~any(diag(M)==k)&&~any(diag(flipud(M))==k)&&~any(M(:,j)==k)&&~any(M1(:)==k)&&~any(M(i, :)==k)
M(i,j)=k;
sudu(m+1, M);
end
end
end
end
为什么加了对角线不重复就运行不了?