1、数独游戏程序%数独游戏程序,可以破解绝大部分数独题。%用法:将所有文件复制到MATLAB工作目录下,或是将MATLAB工作目录修改为本文件夹所在路径。%A是一个初始的99的方阵,空白处用0代替,调用TT=shudu(A),则生成结果。function TT=fill1(A)T=A;i=1;n1=0;n2=0;flag1=judge1(T);while i10 n1=0;n2=0; for j=1:9 if T(i,j)=0&i=flag1(:,1)&j=flag1(:,2)&iden(i,j,1,T)=0 n1=n1+1; end end if n1=1 for j=1:9 if T(i,j)
2、=0&i=flag1(:,1)&j=flag1(:,2)&iden(i,j,1,T)=0 T(i,j)=1; flag1=judge1(T); end end end for j=1:9 if T(j,i)=0&j=flag1(:,1)&i=flag1(:,2)&iden(j,i,1,T)=0 n2=n2+1; end end if n2=1 for j=1:9 if T(j,i)=0&j=flag1(:,1)&i=flag1(:,2)&iden(j,i,1,T)=0 T(j,i)=1; flag1=judge1(T); end end end if n1=1|n2=1 i=0; end i=
3、i+1;endTT=T;function TT=fill2(A)T=A;i=1;n1=0;n2=0;flag2=judge2(T);while i10 n1=0;n2=0; for j=1:9 if T(i,j)=0&i=flag2(:,1)&j=flag2(:,2)&iden(i,j,2,T)=0 n1=n1+1; end end if n1=1 for j=1:9 if T(i,j)=0&i=flag2(:,1)&j=flag2(:,2)&iden(i,j,2,T)=0 T(i,j)=2; flag2=judge2(T); end end end for j=1:9 if T(j,i)=0
4、&j=flag2(:,1)&i=flag2(:,2)&iden(j,i,2,T)=0 n2=n2+1; end end if n2=1 for j=1:9 if T(j,i)=0&j=flag2(:,1)&i=flag2(:,2)&iden(j,i,2,T)=0 T(j,i)=2; flag2=judge2(T); end end end if n1=1|n2=1 i=0; end i=i+1;endTT=T;function TT=fill3(A)T=A;i=1;n1=0;n2=0;flag3=judge3(T);while i10 n1=0;n2=0; for j=1:9 if T(i,j
5、)=0&i=flag3(:,1)&j=flag3(:,2)&iden(i,j,3,T)=0 n1=n1+1; end end if n1=1 for j=1:9 if T(i,j)=0&i=flag3(:,1)&j=flag3(:,2)&iden(i,j,3,T)=0 T(i,j)=3; flag3=judge3(T); end end end for j=1:9 if T(j,i)=0&j=flag3(:,1)&i=flag3(:,2)&iden(j,i,3,T)=0 n2=n2+1; end end if n2=1 for j=1:9 if T(j,i)=0&j=flag3(:,1)&i=
6、flag3(:,2)&iden(j,i,3,T)=0 T(j,i)=3; flag3=judge3(T); end end end if n1=1|n2=1 i=0; end i=i+1;endTT=T;function TT=fill4(A)T=A;i=1;n1=0;n2=0;flag4=judge4(T);while i10 n1=0;n2=0; for j=1:9 if T(i,j)=0&i=flag4(:,1)&j=flag4(:,2)&iden(i,j,4,T)=0 n1=n1+1; end end if n1=1 for j=1:9 if T(i,j)=0&i=flag4(:,1)
7、&j=flag4(:,2)&iden(i,j,4,T)=0 T(i,j)=4; flag4=judge4(T); end end end for j=1:9 if T(j,i)=0&j=flag4(:,1)&i=flag4(:,2)&iden(j,i,4,T)=0 n2=n2+1; end end if n2=1 for j=1:9 if T(j,i)=0&j=flag4(:,1)&i=flag4(:,2)&iden(j,i,4,T)=0 T(j,i)=4; flag4=judge4(T); end end end if n1=1|n2=1 i=0; end i=i+1;endTT=T;fun
8、ction TT=fill5(A)T=A;i=1;n1=0;n2=0;flag5=judge5(T);while i10 n1=0;n2=0; for j=1:9 if T(i,j)=0&i=flag5(:,1)&j=flag5(:,2)&iden(i,j,5,T)=0 n1=n1+1; end end if n1=1 for j=1:9 if T(i,j)=0&i=flag5(:,1)&j=flag5(:,2)&iden(i,j,5,T)=0 T(i,j)=5; flag5=judge5(T); end end end for j=1:9 if T(j,i)=0&j=flag5(:,1)&i
9、=flag5(:,2)&iden(j,i,5,T)=0 n2=n2+1; end end if n2=1 for j=1:9 if T(j,i)=0&j=flag5(:,1)&i=flag5(:,2)&iden(j,i,5,T)=0 T(j,i)=5; flag5=judge5(T); end end end if n1=1|n2=1 i=0; end i=i+1;endTT=T;function TT=fill6(A)T=A;i=1;n1=0;n2=0;flag6=judge6(T);while i10 n1=0;n2=0; for j=1:9 if T(i,j)=0&i=flag6(:,1
10、)&j=flag6(:,2)&iden(i,j,6,T)=0 n1=n1+1; end end if n1=1 for j=1:9 if T(i,j)=0&i=flag6(:,1)&j=flag6(:,2)&iden(i,j,6,T)=0 T(i,j)=6; flag6=judge6(T); end end end for j=1:9 if T(j,i)=0&j=flag6(:,1)&i=flag6(:,2)&iden(j,i,6,T)=0 n2=n2+1; end end if n2=1 for j=1:9 if T(j,i)=0&j=flag6(:,1)&i=flag6(:,2)&iden
11、(j,i,6,T)=0 T(j,i)=6; flag6=judge6(T); end end end if n1=1|n2=1 i=0; end i=i+1;endTT=T;function TT=fill7(A)T=A;i=1;n1=0;n2=0;flag7=judge7(T);while i10 n1=0;n2=0; for j=1:9 if T(i,j)=0&i=flag7(:,1)&j=flag7(:,2)&iden(i,j,7,T)=0 n1=n1+1; end end if n1=1 for j=1:9 if T(i,j)=0&i=flag7(:,1)&j=flag7(:,2)&i
12、den(i,j,7,T)=0 T(i,j)=7; flag7=judge7(T); end end end for j=1:9 if T(j,i)=0&j=flag7(:,1)&i=flag7(:,2)&iden(j,i,7,T)=0 n2=n2+1; end end if n2=1 for j=1:9 if T(j,i)=0&j=flag7(:,1)&i=flag7(:,2)&iden(j,i,7,T)=0 T(j,i)=7; flag7=judge7(T); end end end if n1=1|n2=1 i=0; end i=i+1;endTT=T;function TT=fill8(
13、A)T=A;i=1;n1=0;n2=0;flag8=judge8(T);while i10 n1=0;n2=0; for j=1:9 if T(i,j)=0&i=flag8(:,1)&j=flag8(:,2)&iden(i,j,8,T)=0 n1=n1+1; end end if n1=1 for j=1:9 if T(i,j)=0&i=flag8(:,1)&j=flag8(:,2)&iden(i,j,8,T)=0 T(i,j)=8; flag8=judge8(T); end end end for j=1:9 if T(j,i)=0&j=flag8(:,1)&i=flag8(:,2)&ide
14、n(j,i,8,T)=0 n2=n2+1; end end if n2=1 for j=1:9 if T(j,i)=0&j=flag8(:,1)&i=flag8(:,2)&iden(j,i,8,T)=0 T(j,i)=8; flag8=judge8(T); end end end if n1=1|n2=1 i=0; end i=i+1;endTT=T;function TT=fill9(A)T=A;i=1;n1=0;n2=0;flag9=judge9(T);while i=1+3*k&x=1+3*m&y 0) % Found a solution. & * h7 S! L: M9 m6 R)
15、N return 5$ 3 u1 q5 E5 y5 3 l end , T$ z8 T1 N% b) E; : e4 N end end : Y) I% M$ JD) x( X k6 % - m$ Y% 2 h$ I7 l& J% H8 l- V7 l function C,s,e = candidates(X) C = cell(9,9); ! g+ O* l2 e7 g# k6 N tri = (k) 3*ceil(k/3-1) + (1:3); for j = 1:9 for i = 1:9 uT1 _1 a; w# M) u 3 k! B1 O if X(i,j)=0 9 L) P4
16、t1 x& M2 S3 o1 j) h z = 1:9; 5 Q7 X) |/ R$ q z(nonzeros(X(i,:) = 0; z(nonzeros(X(:,j) = 0; J9 k+ : f# b% | z(nonzeros(X(tri(i),tri(j) = 0; Ci,j = nonzeros(z); end end end - Y Q. . # M L = cellfun(length,C); %Number of candidates. s = find(X=0 & L=1,1); ! G A! I8 p( Y* g3 P4 K e = find(X=0 & L=0,1); % S- C& q) D9 H# n5 6 end % candidates % p2 _/ r* u, o4 E end % sudoku
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2