MATLAB——解数独
数独
数独是一种逻辑游戏,玩家需要根据9x9盘面的已知数字,推理出剩余所有空格的数字,并满足每一行、每一列和每个粗线宫(3x3)内均含1~9,不重复。
MATLAB中有关函数
M = dlmread(filename,delimiter) 使用指定的分隔符,将该文件的数据读取到矩阵M中,并将重复的分隔符视为单个的分隔符
disp(x) 显示变量x的值,而不打印变量名称
代码实现
文件目录
check3_by_3.m
check_cell.m
check_col.m
check_row.m
data.txt
shudu.m
slove.m
check3_by_3.m
function res = check3_by_3(matrix,i,j,num)
%检查(i,j)能否放num
res = true;
block_row = floor((i - ) / ) + ;
block_col = floor((j - ) / ) + ; block_row_to = block_row * ;
block_row_from = block_row_to - ;
block_col_to = block_col * ;
block_col_from = block_col_to - ; for row = block_row_from : block_row_to
for col = block_col_from : block_col_to
if matrix(row,col) == num
res = false;
break;
end
end
end
end
check_cell.m
function res = check_cell(matrix,i,j,num)
%按九宫格检查(i,j)能否放num
if check_row(matrix,i,j,num) && check_col(matrix,i,j,num) && check3_by_3(matrix,i,j,num)
res = true;
else
res = false;
end
end
check_col.m
function res = check_col(matrix,i,j,num)
%按列检查(i,j)能否放num
res = true;
for row = :
if matrix(row,j) == num
res = false;
break;
end
end
end
check_row.m
function res = check_row(matrix,i,j,num)
%按行检查(i,j)能否放num
res = true;
for col = :
if matrix(i,col) == num
res = false;
break;
end
end
end
data.txt (想要破解的数独矩阵)
5 3 0 0 7 0 0 0 0
6 0 0 1 9 5 0 0 0
0 9 8 0 0 0 0 6 0
8 0 0 0 6 0 0 0 3
4 0 0 8 0 3 0 0 1
7 0 0 0 2 0 0 0 6
0 6 0 0 0 0 2 8 0
0 0 0 4 1 9 0 0 5
0 0 0 0 8 0 0 7 9
shudu.m (主程序)
matrix = dlmread('data3.txt','');
disp(matrix);
solve(matrix,);
slove.m
function solve(matrix,id)
%按编号逐一填充,递归
if id >
disp(matrix);
else
row = floor((id - ) / ) + ;
col = mod((id - ),) + ; if matrix(row,col) ~=
solve(matrix,id + );
else
for i = :
if check_cell(matrix,row,col,i) == true
matrix(row,col) = i;
solve(matrix,id + );
end
end
end
end
end
效果图

参考链接:https://youtu.be/La57P8wNnLA
MATLAB——解数独的更多相关文章
- 用C++实现的解数独(Sudoku)程序
我是一个C++初学者,控制台实现了一个解数独的小程序. 代码如下: //"数独游戏"V1.0 //李国良于2016年11月11日编写完成 #include <iostream ...
- matlab 解方程组
1.解方程 最近有多人问如何用matlab解方程组的问题,其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB中有两种方法:(1)x=in ...
- Jquery暴力解数独
var arry= new Array(); var nums= new Array(); var snum; function numchain() { snum=0; for(var i=0; ...
- hdu 3111 DLX解数独
思路:裸的DLX解数独.关键是建图,感觉还不如写个dfs直接,DLX写这个的代码很烦. #include<set> #include<map> #include<cmat ...
- 【原创】一个基于简单剪枝的DFS解数独程序
问题来源:leetCode Sudoku Solver Write a program to solve aSudoku puzzle by filling the empty cells. Empt ...
- 使用python解数独
偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...
- [leetcode]37. Sudoku Solver 解数独
Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must satisfy ...
- java解数独
先输入要解的数独,采用多维数组来保存其中的值,未填数字的地方,初始化为0,然后采用递归的方法来解数独. 直接上代码: /** * * @author walker * */ public class ...
- 解数独(Python)
0.目录 1.介绍 2.一些通用函数 3.全局变量(宏变量) 4.数独预处理(约束传播) 5.解数独(深度优先搜索+最小代价优先) 6.主函数 7.总代码 1.介绍 数独是一个非常有趣味性的智力游戏, ...
随机推荐
- 1.SJ-SLAM-14
1.引言 SLAM:Simultaneous Localization and Mapping 同时定位与地图构建 搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估 ...
- css 属性相关
css属性相关 宽和高 width属性可以为元素设置宽度, height属性可以为元素设置好高度 块级标签才能设置宽度,内联标签的宽度由内容来决定. 字体属性 文字字体 font-family 可以把 ...
- JavaScript数组及相关方法
数组 1.创建数组 var array = new Array(); var array = new Array(size);//指定数组的长度 var array = new Array(item1 ...
- 在 beforeSend中设置ajax请求的Content-type
$.ajaxSetup({ beforeSend: function (xhr, settings) { if (settings.type == "PO ...
- unity surface shader 1
Unity ShaderLib : CGPROGRAM ENDCG之间是CG代码,之外的代码功能都由ShaderLib提供,CG中的一些方法比如tex2D(...)也是ShaderLib对CG进行 ...
- python 函数 之 用户注册register()
db_path='db.txt' #定义默认文件路径,方便修改def get_uname(): while True: uname=input('请输入用户名:').strip() if uname. ...
- MyBatist庖丁解牛(五)
很多时候我们在自己的每个service中没有中注入SqlSessionTemplate; 但是我们直接调用mapper接口方法就直接能够操作数据库 这个是为什么??下面开始解惑: Mybatis Sq ...
- Tomcat日志文件的输出在Linux和Windows下的差异
前言 最近老大发现Tomcat的日志文件catalina.out里存在着大量的和公司项目相关的log信息,因为一般都是会使用日志框架并另外将log信息输出到另外的文件里的,catalina.out文件 ...
- Caffe实战五(Caffe可视化方法:编译matlab接口)
接上一篇文章,这里给出配置caffe后编译matlab接口的方法.(参考:<深度学习 21天实战Caffe 第16天 Caffe可视化方法>) 1.将Matlab目录更新至Caffe的Ma ...
- 统计最长回文串(传说中的Manacher算法)Hihocoder 1032
算法的核心就在这一句上了:p[i] = min(p[2*id-i], p[id] + id - i); #include <iostream> #include <cstdio> ...