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.介绍 数独是一个非常有趣味性的智力游戏, ...
随机推荐
- 1090 Highest Price in Supply Chain (25 分)
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- unity关于StartCoroutine的简单线程使用
StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使 ...
- (十一)SpringBoot导出excel文件
一:添加POI依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-oox ...
- noip2017普及组
过了这么久才来写博客,也是我这么一段时间都很低迷吧.... 老实来说,今年应该是要打提高组的...可还是打了普及组... 其实最猥琐的还是我连普及都写挂了,作为一个学了两年的人,图论,进阶dp都写过的 ...
- Python-1-基础
获取用户输入 >>> x = input("x: ") x: 34 >>> y = input("y: ") y: 42 & ...
- Machine Learning Codeforces - 940F(带修莫队) && 洛谷P4074 [WC2013]糖果公园
以下内容未验证,有错请指正... 设块大小为T,则块数为$\frac{n}{T}$ 将询问分为$(\frac{n}{T})^2$块(按照左端点所在块和右端点所在块分块),同块内按时间从小到大依次处理 ...
- springMVC-RESTful支持
RESTful支持 什么是restful? Restful就是一个资源定位及资源操作的风格.不是标准也不是协议,只是一种风格,是对http协议的诠释. 资源定位:互联网所有的事物都是资源,要求url中 ...
- Hadoop启动datanode失败,clusterId有问题
问题: 搭建伪Hadoop集群的时候,运行命令: hdfs namenode -format 格式化或者说初始化namenode. 然后用命令: start-dfs.sh 来启动hdfs时,jps发现 ...
- 51nod 1640 天气晴朗的魔法 二分 + 克鲁斯卡算法(kruskal算法) 做复杂了
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 一开始想的时候,看到要使得最大值最小,那这样肯定是二分这个最大值了 ...
- 本地连接远程Oracle数据库
由于项目开发测试,需要在本地连接远程的Oracle数据库 之前搭过环境,但是重装了系统,现在又重新装一遍 软件安装 连接远程Oracle需要两个软件: 一个Oracle客户端,instantclien ...