数独游戏程序

  • 格式:doc
  • 大小:50.00 KB
  • 文档页数:12

%数独游戏程序,可以破解绝大部分数独题。

%用法:将所有文件复制到MATLAB工作目录下,或是将MATLAB工作目录修改为本文件夹所在路径。

%A是一个初始的99的方阵,空白处用0代替,调用TT=shudu(A),则生成结果。

function TT=fill1(A)T=A;i=1;n1=0;n2=0;flag1=judge1(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag1(:,1)&j~=flag1(:,2)&iden(i,j,1,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag1(:,1)&j~=flag1(:,2)&iden(i,j,1,T)==0T(i,j)=1;flag1=judge1(T);endendendfor j=1:9if T(j,i)==0&j~=flag1(:,1)&i~=flag1(:,2)&iden(j,i,1,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag1(:,1)&i~=flag1(:,2)&iden(j,i,1,T)==0T(j,i)=1;flag1=judge1(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function TT=fill2(A)T=A;i=1;n1=0;n2=0;flag2=judge2(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag2(:,1)&j~=flag2(:,2)&iden(i,j,2,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag2(:,1)&j~=flag2(:,2)&iden(i,j,2,T)==0T(i,j)=2;flag2=judge2(T);endendendfor j=1:9if T(j,i)==0&j~=flag2(:,1)&i~=flag2(:,2)&iden(j,i,2,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag2(:,1)&i~=flag2(:,2)&iden(j,i,2,T)==0T(j,i)=2;flag2=judge2(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function TT=fill3(A)T=A;i=1;n1=0;n2=0;flag3=judge3(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag3(:,1)&j~=flag3(:,2)&iden(i,j,3,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag3(:,1)&j~=flag3(:,2)&iden(i,j,3,T)==0T(i,j)=3;flag3=judge3(T);endendendfor j=1:9if T(j,i)==0&j~=flag3(:,1)&i~=flag3(:,2)&iden(j,i,3,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag3(:,1)&i~=flag3(:,2)&iden(j,i,3,T)==0T(j,i)=3;flag3=judge3(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function TT=fill4(A)T=A;i=1;n1=0;n2=0;flag4=judge4(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag4(:,1)&j~=flag4(:,2)&iden(i,j,4,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag4(:,1)&j~=flag4(:,2)&iden(i,j,4,T)==0T(i,j)=4;flag4=judge4(T);endendendfor j=1:9if T(j,i)==0&j~=flag4(:,1)&i~=flag4(:,2)&iden(j,i,4,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag4(:,1)&i~=flag4(:,2)&iden(j,i,4,T)==0T(j,i)=4;flag4=judge4(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function TT=fill5(A)T=A;i=1;n1=0;n2=0;flag5=judge5(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag5(:,1)&j~=flag5(:,2)&iden(i,j,5,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag5(:,1)&j~=flag5(:,2)&iden(i,j,5,T)==0T(i,j)=5;flag5=judge5(T);endendendfor j=1:9if T(j,i)==0&j~=flag5(:,1)&i~=flag5(:,2)&iden(j,i,5,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag5(:,1)&i~=flag5(:,2)&iden(j,i,5,T)==0T(j,i)=5;flag5=judge5(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function TT=fill6(A)T=A;i=1;n1=0;n2=0;flag6=judge6(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag6(:,1)&j~=flag6(:,2)&iden(i,j,6,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag6(:,1)&j~=flag6(:,2)&iden(i,j,6,T)==0T(i,j)=6;flag6=judge6(T);endendendfor j=1:9if T(j,i)==0&j~=flag6(:,1)&i~=flag6(:,2)&iden(j,i,6,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag6(:,1)&i~=flag6(:,2)&iden(j,i,6,T)==0T(j,i)=6;flag6=judge6(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function TT=fill7(A)T=A;i=1;n1=0;n2=0;flag7=judge7(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag7(:,1)&j~=flag7(:,2)&iden(i,j,7,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag7(:,1)&j~=flag7(:,2)&iden(i,j,7,T)==0T(i,j)=7;flag7=judge7(T);endendendfor j=1:9if T(j,i)==0&j~=flag7(:,1)&i~=flag7(:,2)&iden(j,i,7,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag7(:,1)&i~=flag7(:,2)&iden(j,i,7,T)==0T(j,i)=7;flag7=judge7(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function TT=fill8(A)T=A;i=1;n1=0;n2=0;flag8=judge8(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag8(:,1)&j~=flag8(:,2)&iden(i,j,8,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag8(:,1)&j~=flag8(:,2)&iden(i,j,8,T)==0T(i,j)=8;flag8=judge8(T);endendendfor j=1:9if T(j,i)==0&j~=flag8(:,1)&i~=flag8(:,2)&iden(j,i,8,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag8(:,1)&i~=flag8(:,2)&iden(j,i,8,T)==0T(j,i)=8;flag8=judge8(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function TT=fill9(A)T=A;i=1;n1=0;n2=0;flag9=judge9(T);while i<10n1=0;n2=0;for j=1:9if T(i,j)==0&i~=flag9(:,1)&j~=flag9(:,2)&iden(i,j,9,T)==0n1=n1+1;endendif n1==1for j=1:9if T(i,j)==0&i~=flag9(:,1)&j~=flag9(:,2)&iden(i,j,9,T)==0T(i,j)=9;flag9=judge9(T);endendendfor j=1:9if T(j,i)==0&j~=flag9(:,1)&i~=flag9(:,2)&iden(j,i,9,T)==0n2=n2+1;endendif n2==1for j=1:9if T(j,i)==0&j~=flag9(:,1)&i~=flag9(:,2)&iden(j,i,9,T)==0T(j,i)=9;flag9=judge9(T);endendendif n1==1|n2==1i=0;endi=i+1;endTT=T;function pp=iden(x,y,num,T)f=0;for k=0:2for m=0:2if x>=1+3*k&x<=3*(k+1)&y>=1+3*m&y<=3*(m+1) for i=1:3for j=1:3if T(i+3*k,j+3*m)==numf=1;endendendendendendpp=f;function flag1=judge1(A)T=A;k=1;for i=1:9for j=1:9if T(i,j)==1flag1(k,:)=[i,j];k=k+1;endendendfunction flag2=judge2(A)T=A;k=1;for i=1:9for j=1:9if T(i,j)==2flag2(k,:)=[i,j];k=k+1;endendendfunction flag3=judge3(A) T=A;k=1;for i=1:9for j=1:9if T(i,j)==3flag3(k,:)=[i,j];k=k+1;endendendfunction flag4=judge4(A) T=A;k=1;for i=1:9for j=1:9if T(i,j)==4flag4(k,:)=[i,j];k=k+1;endendendfunction flag5=judge5(A) T=A;k=1;for i=1:9for j=1:9if T(i,j)==5flag5(k,:)=[i,j];k=k+1;endendendfunction flag6=judge6(A) T=A;k=1;for i=1:9for j=1:9if T(i,j)==6flag6(k,:)=[i,j];k=k+1;endendendfunction flag7=judge7(A) T=A;k=1;for i=1:9for j=1:9if T(i,j)==7flag7(k,:)=[i,j];k=k+1;endendendfunction flag8=judge8(A) T=A;k=1;for i=1:9for j=1:9if T(i,j)==8flag8(k,:)=[i,j];k=k+1;endendendfunction flag9=judge9(A) T=A;k=1;for i=1:9for j=1:9if T(i,j)==9flag9(k,:)=[i,j];k=k+1;endendendfunction TT=shudu(A)T=A;f=1;n=0;while f==1T=fill1(T);T=fill2(T);T=fill3(T);T=fill4(T);T=fill5(T);T=fill6(T);T=fill7(T);T=fill8(T);T=fill9(T);t1=size(judge1(T));t2=size(judge2(T));t3=size(judge3(T));t4=size(judge4(T));t5=size(judge5(T));t6=size(judge6(T));t7=size(judge7(T));t8=size(judge8(T));t9=size(judge9(T));ift1(1)==9&t2(1)==9&t3(1)==9&t4(1)==9&t5(1)==9&t6(1)==9&t7(1)==9&t8(1)==9&t9(1)==9|n==1 00f=0;endn=n+1;endTT=T;。