简单的数独游戏求解程序(matlab)

2022-05-19 13:16:20   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《简单的数独游戏求解程序(matlab)》,欢迎阅读!
求解,简单,程序,matlab,游戏

function S=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>2 A_ti=A;%原始题目 while 1

[d,p]=find_variable(A); C{p(1),p(2)}=d; n=length(d); if n>n0 n0=n end if n>1

k1(s)=9*(p(2)-1)+p(1); s=s+1;

A1{p(1),p(2)}=A; elseif n==0 s=s-1;

if A(k1(s))==C{k1(s)}(end) s=s-1; end

k=k1(s);%break A=A1{k};

A(k)=C{k}(2);%目前为止没有超过2个可选元素的 continue end

A(p(1),p(2))=C{p(1),p(2)}(1); k=k+1;

if sum(sum(ceil(A/9)))==81%判断是否填完了 break end

%if sum(sum(ceil(A/9)))==81 % break %end end S=A

%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个元素为所在列 global C D=[1:9]; for k1=1:9 for k2=1:9

if A(k1,k2)~=0 %跳过已给数值 continue else

n1=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)); %行列宫并集的补集,即可填数 if length(d0) %选出元素最少的 D=d0;P=[k1,k2]; %返回元素值及位置 end end end end


本文来源:https://www.dywdw.cn/028d7996dd88d0d233d46a6d.html

相关推荐
推荐阅读