欢迎来到天天文库
浏览记录
ID:56718888
大小:70.00 KB
页数:2页
时间:2020-07-06
《简单的数独游戏求解程序(matlab).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、functionS=sudoku(A)%SUSOKU0功能:求解数独%调用格式:S=sudoku(A)%A--需判断的数独矩阵(9×9),空格用0替代%S--数独的解%A=xlsread('sudoku.xls','A11:I19');k=1;s=1;A1=cell(9);C=cell(9);n0=0%n0>2A_ti=A;%原始题目while1[d,p]=find_variable(A);C{p(1),p(2)}=d;n=length(d);ifn>n0n0=nendifn>1k1(s)=9*(p(2)-1)
2、+p(1);s=s+1;A1{p(1),p(2)}=A;elseifn==0s=s-1;ifA(k1(s))==C{k1(s)}(end)s=s-1;endk=k1(s);%breakA=A1{k};A(k)=C{k}(2);%目前为止没有超过2个可选元素的continueendA(p(1),p(2))=C{p(1),p(2)}(1);k=k+1;ifsum(sum(ceil(A/9)))==81%判断是否填完了breakend%ifsum(sum(ceil(A/9)))==81%break%endendS=A
3、%A=xlswrite('sudoku.xls',S,'k11:S19');function[D,P]=find_variable(A)%Find_variable功能:找出数独矩阵中可填值最少的位置及可填值%调用格式:[D,P]=find_variable(A)%S--需判断的数独矩阵(9×9),空处用0替代%D--可填的值%P--可填值最少的位置,P中第1个元素为所在行,第2个元素为所在列globalCD=[1:9];fork1=1:9fork2=1:9ifA(k1,k2)~=0%跳过已给数值continu
4、eelsen1=ceil(k1/3);n2=ceil(k2/3);m=A(3*n1-2:3*n1,3*n2-2:3*n2);a=A(k1,:);%行b=A(:,k2)';%列c=reshape(m',1,9);%宫d0=setdiff(1:9,union(union(a,b),c));%行列宫并集的补集,即可填数iflength(d0)
此文档下载收益归作者所有