用MATLAB的GUI制作一个数独游戏,可以下来方法来制作
1、首先用guide命令,打开GUI模板,搭建数独游戏的界面(界面可以根据自己的喜好搭建)
2、其二对每个组件的特性进行定义编辑,同时输入相应的执行代码
3、然后保存,调试,运行
4、数独的主要计算代码
%找出A中一个最小数(一般为0)的位置(row,col)
[row,col]=find(temp==min(min(temp)))
row=row(1)col=col(1)
%找出(row,col)位置所有可能的元素
r=A(row,:)c=A(:,col)
rc1=union(r,c)
rr=ceil(row./3)-1
cc=ceil(col./3)-1
rc2=A(rr*3+1:rr*3+3,cc*3+1:cc*3+3)
total=union(rc1,rc2(:))
P= setdiff([1:9],total)
5、下面是没有嵌入GUI的界面的运算结果
function B=shudu(A)%计算数独的程序。
%0表示待填的空格
%例子
%A=[2 0 0 0 9 0 0 0 7
% 0 0 0 0 6 3 0 0 9
% 0 0 9 1 0 5 0 0 0
% 3 0 8 0 0 6 2 0 1
% 0 0 1 0 0 0 3 0 0
% 7 0 5 3 0 0 4 0 8
% 0 0 0 6 0 9 5 0 0
% 1 0 0 2 4 0 0 0 0
% 6 0 0 0 3 0 0 0 4]
%shudu(A)
%ans =
% 2 3 6 8 9 4 1 5 7
% 5 1 4 7 6 3 8 2 9
% 8 7 9 1 2 5 6 4 3
% 3 4 8 9 5 6 2 7 1
% 9 2 1 4 8 7 3 6 5
% 7 6 5 3 1 2 4 9 8
% 4 8 3 6 7 9 5 1 2
% 1 5 7 2 4 8 9 3 6
% 6 9 2 5 3 1 7 8 4
[a,b]=find(A==0)%找0
if isempty(a)%如果没有0,就说明填满了,这就是答案。
B=A
else%如果有0,就列出每个0的所有可能取值。
for i=1:length(a)
I{i}=[]
t=1:9
for j=1:9
if A(a(i),j)~=0
t(A(a(i),j))=0
end
if A(j,b(i))~=0
t(A(j,b(i)))=0
end
end
for j=(ceil(a(i)/3)*3-2):(ceil(a(i)/3)*3)
for k=(ceil(b(i)/3)*3-2):(ceil(b(i)/3)*3)
if A(j,k)~=0
t(A(j,k))=0
end
end
end
I{i}=find(t~=0)
if isempty(I{i})%如果没有可能项,说明矛盾。
B=[]return
end
z(i)=length(I{i})
end
[p,q]=min(z)%从可能取值最少的地方开刀,这样快点
for j=1:p%将可能的值一个个代入,递归
C=AC(a(q),b(q))=I{q}(j)
B=shudu(C)
if ~isempty(B)
return
end
end
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)