MATLAB 解数独
数独是一种较为常见的游戏,一般有4乘4、6乘6、9乘9几种,就像下面这种,本文也是主要求解此类数独。
此外还有一些奇形怪状的,如下图两种,均是不规则的,在此并不会涉及,但会在以后发布代码以及过程。
首先在MATLAB中新建一个文本文件,用来存放原始数独,用空格间隔开,用‘0’来替代需要填数值的位置,就像下图,然后命名为date.txt即可。
接下来新建一个脚本文件,命名为Untiltled2.m。在Untiltled2.m中打开文本,并存入变量shudu之中,在调用disp函数,将shuzu变量输出到命令行中。
shudu= textread('date.txt');
disp(shudu);
接下来判断该格子受否可以填入某数字,如第一张图中,第一个格子所填的数,用该满足在该行,该列,以及该小单元内不能有重复,因此,需要对是否有重复进行判断。
首先是进行行判断,要求遍历1~9九个数字,如果在该行中的原始数据已经存在该数字,即返回false,如果没有,即返回true。新建一个函数,命名为chack_hang,用来判断第i行,第j列中是否可以填数值num,返回值是false或者true。
function result= chack_hang( shudu,i,j,num )%定义函数result=true;%默认为真,值可以传入,并进行下面的判断for lie=1:9if shudu(i,lie)==num% 当result=false;break;endend
end
再是对列进行遍历,与行遍历的原理相同。
function result= chack_lie( shudu,i,j,num )result=true;for hang=1:9if shudu(hang,j)==numresult=false;break;endend
end
当对行以及列遍历完成后,在对每一个大格子进行遍历。
function result= chack3_3( shudu,i,j,num )
result=true;
maxhang=floor((i-1)/3)+1;
maxlie=floor((j-1)/3)+1;
hang_to=maxhang*3;
hang_from=hang_to-2;
lie_to=maxlie*3;
lie_from=lie_to-2;
for i=hang_from:hang_tofor j=lie_from:lie_toif shudu(i,j)==numresult=false;break;endend
end
由于有些数独有主对角线元素不能相同的规定,因此在编写一个控制主对角线元素的函数。
function result= chack_xie(shudu,i,j,num)
result = true;
if i==jfor hang=1:9if shudu(hang,hang)==numresult=false;break;endend
end
if i==10-jfor hang=1:9if shudu(hang,10-hang)==numresult=false;break;endend
end
最后在将前三组的便利组合起来,以便找出所有符合的数字。
对于有些数独,要求主对角线元素也不能重复,只要取消下面这串代码中标注行的注释符号即可
function result = chack_all(shudu,i,j,num)if chack_hang(shudu,i,j,num)==falseresult=false;elseif chack_lie(shudu,i,j,num)==falseresult=false;elseif chack3_3(shudu,i,j,num)==falseresult=false;% elseif chack_xie(shudu,i,j,num)==false %要求主对角线上的元素不能想等% result=false;else result=true;end
end
最终通过函数递归调用,来寻找出所有的可能结果。
function jsd(shudu,id)
if id>81disp(shudu)
elsehang=floor((id-1)/9)+1;lie=mod(id-1,9)+1;if shudu(hang,lie)~=0jsd(shudu,id+1);elsefor num=1:9if chack_all(shudu,hang,lie,num)==trueshudu(hang,lie)=num;jsd(shudu,id+1);endendend
end
end
新建一个脚本文件,在里面调用函数jsd即可。
shudu= textread('date.txt');
disp(shudu);
jsd(shudu,1);
即可求解出数独的解。如上述数独中的求解结果。
MATLAB 解数独相关推荐
- 花了1晚上diy的matlab解数独算法,很好理解!
花了1晚上diy的matlab解数独算法,很好理解! 前言 一.数独的规则 二.算法 1.思路 2.流程图 3.Matlab代码 总结 前言 老婆最近迷上了数独,还给我拍了张照片,初步了解了规则之后, ...
- matlab 版 数独小游戏 GUI界面设计
近期,由于各种原因,接触到了matlab版的数独小游戏,需要做GUI界面.由于之前本科的时候自己也做过简单的界面涉及,就以为很简单,结果,piapia打脸.数独中的数字是在table中显示的,为了将题 ...
- java解数独_java解数独
先输入要解的数独,采用多维数组来保存其中的值,未填数字的地方,初始化为0,然后采用递归的方法来解数独. 直接上代码: /*** *@authorwalker **/ public classSudok ...
- delphi dbgrideh 遍历每一个单元格_用Python解数独[1]:求每个单元格的行值域
目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...
- LeetCode算法题11:递归和回溯-解数独
文章目录 解数独 回溯 : 仅仅在实现方式上有区别 总结 解数独 题目链接:https://leetcode-cn.com/problems/sudoku-solver/ 题目描述:编写一个程序,通过 ...
- LeetCode 36有效的数独37解数独(八皇后问题)
公众号:bigsai 回复进群加入打卡 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列 ...
- python数独游戏源代码100行_python实现解数独程序代码
偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...
- 面试题目_经典面试题目「回溯算法」解数独
解数独,理解二维递归是关键! 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家 ...
- python37降到36原来的包还可以用吗_【lc刷题】36/37 有效的数独/解数独(143-144/300)...
143-144/300 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. ...
- python deepcopy函数_用Python解数独[6]:递归获得最终答案
目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...
最新文章
- ASP.NET图象处理详解
- shiro表单认证(系统默认的form认证器)
- 常用的正则表达式验证类
- php申请系统,PHP+MYSQL的文章管理系统(一)_php
- Fail to get tape drive(tsm) inventory
- item不可见 recycleview_Android解决RecyclerView中的item显示不全方案
- Word2016中出现多级标题自动编号不连续问题
- itunes安装后不能用,双击后等很长时间,提示:ITUNES 驱动程序缺少用于导入和刻录的CD与DVD注册的设置...
- imdisk命令行使用及配置
- cisco MSDP配置指南
- 期货突破(期货突破交易法)
- win10网络图标变成地球加禁止符号但能上网解决办法
- 手机耳塞 录音同时外放_如何将Android手机切换为“单声道”(这样就可以戴一副耳塞)
- 加载大图片,内存溢出问题
- windows7旗舰版64位安装时出现选择需要安装的驱动程序
- 【Linux 内核 内存管理】物理分配页 ⑧ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 获取首选内存区域 | 异步回收内存页 | 最低水线也分配 | 直接分配 )
- 前端开发面试知识点大纲
- 生而为人,我很抱歉 ——《人间失格》
- 千牛中文件已存在于服务器上,千牛登陆在云服务器上
- 汇编程序中的符号或标号地址
热门文章
- H3C交换机静态路由与NQA联动
- 添加视频字幕后期制作Premiere Pro 2022中文
- 【SpringBoot实战】分布式定时任务锁Shedlock
- 验收测试的名词解释_验收测试工作流程及准则
- 菜狗centos7.6安装CDH6.1.1(5.13.2)离线集群安装步骤和遇到的各种坑(笔记)
- 抑制剂以及抗体偶联物在免疫检查点中的作用
- 微信撤回服务器有没有,无需任何软件, 告诉你如何查看微信撤回的图片!
- Ansible自动运维工具
- Photoshop2019 系统错误 无法启动此程序修复教程
- 集成底座项目实施总结