数独是一种较为常见的游戏,一般有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. 花了1晚上diy的matlab解数独算法,很好理解!

    花了1晚上diy的matlab解数独算法,很好理解! 前言 一.数独的规则 二.算法 1.思路 2.流程图 3.Matlab代码 总结 前言 老婆最近迷上了数独,还给我拍了张照片,初步了解了规则之后, ...

  2. matlab 版 数独小游戏 GUI界面设计

    近期,由于各种原因,接触到了matlab版的数独小游戏,需要做GUI界面.由于之前本科的时候自己也做过简单的界面涉及,就以为很简单,结果,piapia打脸.数独中的数字是在table中显示的,为了将题 ...

  3. java解数独_java解数独

    先输入要解的数独,采用多维数组来保存其中的值,未填数字的地方,初始化为0,然后采用递归的方法来解数独. 直接上代码: /*** *@authorwalker **/ public classSudok ...

  4. delphi dbgrideh 遍历每一个单元格_用Python解数独[1]:求每个单元格的行值域

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

  5. LeetCode算法题11:递归和回溯-解数独

    文章目录 解数独 回溯 : 仅仅在实现方式上有区别 总结 解数独 题目链接:https://leetcode-cn.com/problems/sudoku-solver/ 题目描述:编写一个程序,通过 ...

  6. LeetCode 36有效的数独37解数独(八皇后问题)

    公众号:bigsai 回复进群加入打卡 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列 ...

  7. python数独游戏源代码100行_python实现解数独程序代码

    偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...

  8. 面试题目_经典面试题目「回溯算法」解数独

    解数独,理解二维递归是关键! 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家 ...

  9. python37降到36原来的包还可以用吗_【lc刷题】36/37 有效的数独/解数独(143-144/300)...

    143-144/300 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. ...

  10. python deepcopy函数_用Python解数独[6]:递归获得最终答案

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

最新文章

  1. ASP.NET图象处理详解
  2. shiro表单认证(系统默认的form认证器)
  3. 常用的正则表达式验证类
  4. php申请系统,PHP+MYSQL的文章管理系统(一)_php
  5. Fail to get tape drive(tsm) inventory
  6. item不可见 recycleview_Android解决RecyclerView中的item显示不全方案
  7. Word2016中出现多级标题自动编号不连续问题
  8. itunes安装后不能用,双击后等很长时间,提示:ITUNES 驱动程序缺少用于导入和刻录的CD与DVD注册的设置...
  9. imdisk命令行使用及配置
  10. cisco MSDP配置指南
  11. 期货突破(期货突破交易法)
  12. win10网络图标变成地球加禁止符号但能上网解决办法
  13. 手机耳塞 录音同时外放_如何将Android手机切换为“单声道”(这样就可以戴一副耳塞)
  14. 加载大图片,内存溢出问题
  15. windows7旗舰版64位安装时出现选择需要安装的驱动程序
  16. 【Linux 内核 内存管理】物理分配页 ⑧ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 获取首选内存区域 | 异步回收内存页 | 最低水线也分配 | 直接分配 )
  17. 前端开发面试知识点大纲
  18. 生而为人,我很抱歉 ——《人间失格》
  19. 千牛中文件已存在于服务器上,千牛登陆在云服务器上
  20. 汇编程序中的符号或标号地址

热门文章

  1. H3C交换机静态路由与NQA联动
  2. 添加视频字幕后期制作Premiere Pro 2022中文
  3. 【SpringBoot实战】分布式定时任务锁Shedlock
  4. 验收测试的名词解释_验收测试工作流程及准则
  5. 菜狗centos7.6安装CDH6.1.1(5.13.2)离线集群安装步骤和遇到的各种坑(笔记)
  6. 抑制剂以及抗体偶联物在免疫检查点中的作用
  7. 微信撤回服务器有没有,无需任何软件, 告诉你如何查看微信撤回的图片!
  8. Ansible自动运维工具
  9. Photoshop2019 系统错误 无法启动此程序修复教程
  10. 集成底座项目实施总结