有效的数独 python_Python判断有效的数独算法示例
本文实例讲述了Python判断有效的数独算法。分享给大家供大家参考,具体如下:
一、题目
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
1. 数字 1-9 在每一行只能出现一次。
2. 数字 1-9 在每一列只能出现一次。
3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
数独部分空格内已填入了数字,空白格用 ‘.' 表示。
例1:
输入:
[
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
输出: true
例2:
输入:
[
["8","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
输出: false
解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。
但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
二、解法
先创建三个空数组 row、col、cell,以 cell 为例,里面的每个空字典都代表一个 3×3单元格,然后我们需要把数据一个个填进去
遍历整个二维数组,然后边遍历边把数组分别存入到 行 row , 列 col , 3×3单元格 cell 内的字典,存为key ,而不是 value 。
然后我们就可以判断,行、列、3×3单元格 对应的字典内是否已经存在board[x][y]这个键名,如果存在,那么说明重复了,返回 False
注意,字典中的值这里都为1,但是没有任何意义,你可以随意更改
把数组存入 3×3的单元格是一个难点,num = 3*(x//3)+y//3,这个式子是关键,可以找个数独,然后代入进去好好理解下
当然你也可以不用这个式子,用if/else语句来判断也行,那样比较好理解,但是不如这个式子简洁
类似于: if y<3 : ... elif 3<=y<6 : ... elif 6<=y : ...,
代码如下:
#row,col,cell分别代表行,列,3x3单元格
row, col, cell =
[{}, {}, {}, {}, {}, {}, {}, {}, {}],
[{}, {}, {}, {}, {}, {}, {}, {}, {}],
[{}, {}, {}, {}, {}, {}, {}, {}, {}]
for x in range(9):
for y in range(9):
#取得单元格
num = 3*(x//3)+y//3
temp = board[x][y]
#不需要存入 '.'
if temp != '.':
if (temp not in row[x]
and temp not in col[y]
and temp not in cell[num]):
row[x][temp] = '1'
col[y][temp] = '1'
cell[num][temp] = '1'
else:
return False
return True
时间 64ms,击败了 99.3%
希望本文所述对大家Python程序设计有所帮助。
有效的数独 python_Python判断有效的数独算法示例相关推荐
- python图像数独_Python判断有效的数独算法示例
本文实例讲述了Python判断有效的数独算法.分享给大家供大家参考,具体如下: 一.题目 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 1. 数字 1-9 在 ...
- python数独伪代码回溯法_数独的暴力回溯解法和Python GUI
数独起源于18世纪初瑞士数学家欧拉等人研究的拉丁方阵,20世纪70年代,经过美国及日本学者的推广和改良,定名为数独(Sudoku),大致的意思是"独个的数字"或"只出现一 ...
- leetcode 36. 有效的数独 (将 9 * 9 数独划分成 9 宫格 )
leetcode 36. 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. ...
- (附代码)数独大作业【读取数独,解数独,生成唯一解数独(随机,特定形状,不同难度生成),玩数独】
注:未经同意不要转载. 上学期简单的做了一个数独程序,实现了一些功能,想简单的为大家提供的思路. 为了避免某些情况出现,具体代码暂时先不发了,有不太懂的地方可以评论提问啊. 下面是我的具体报告: 一, ...
- 输入数独题目,程序输出数独的唯一解。保证所有已知数据的格式都是合法的,并且题目有唯一的解。
你一定听说过"数独"游戏. 如[图1.png],玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独 ...
- 漫画:算法如何验证合法数独 | 全世界最难的数独?
今天是小浩算法 "365刷题计划" 第95天 .数独相信在座的各位都玩过,那我们如何使用程序去验证一个 9×9 的数独是有效的呢?一起看下! 01 PART 有效的数独 数独是源自 ...
- python数独伪代码回溯法_数独 #回溯算法 #CTF
1. intro:巅峰极客的一道逆向 刷巅峰极客2020里的rev题fu!kpy,复杂得不行但是看到if d[1][0] != '8' or d[1][7] != '2'和if check(h1) ! ...
- python图像数独_Python图像识别+KNN求解数独的实现
Python-opencv+KNN求解数独 最近一直在玩数独,突发奇想实现图像识别求解数独,输入到输出平均需要0.5s. 整体思路大概就是识别出图中数字生成list,然后求解. 输入输出demo 数独 ...
- java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用
我们知道Java中的对象一般存放在堆中,但是总不能让这些对象一直占着内存空间,这些对象最终都会被回收并释放内存,那么我们如何判断对象已经成为垃圾呢?这篇文章会提出两种算法解决这个问题.另外,本文还要谈 ...
- php 识别图片主色调,PHP 判断图片主色调的简单示例
这篇文章主要为大家详细介绍了PHP 判断图片主色调的简单示例,具有一定的参考价值,可以用来参考一下. 这段代码可以帮助你判断任意图片的主色调,使用了简单的统计算法实现 ,感兴趣的小伙伴,下面一起跟随5 ...
最新文章
- 工作5年后才明白的道理:不起眼的技能中,藏着你的未来
- SAP PP 启用了MRP Area之后MMBE有什么变化?
- JavaScript中null与undefined的比较
- 安装phpstudy之后发现80端口被占用
- MySQL relay log 详细参数解释
- .NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(上)...
- 定位position详解:relative与absolute
- maven缺失ojdbc6解决方案 :Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错
- Java使用Redis(jedis)
- 科研财务mysql相减_基于PHP和MySQL技术的地方高校科研管理系统的设计与实现
- livereload_使用LiveReload节省编码时间和精力
- C9:Unity3D制作智能家居设计软件——导入户型图自动设计(算法剖析+源码实现篇)
- TAOCP-Reading-计算机程序设计艺术阅读-1-2
- 【QGIS】无法定位程序输入点~于动态链接库~上
- 卡西欧计算器说明书获取方法
- Unity做360度的全景照片
- 百词斩2021高频题汇总 | 备战春招,刷这30题就够了!
- 公众号文章怎么制作?
- c语言指针 —— 面试题
- 郑大计算机专业多少分,2020年,郑大各专业分数线公布,里面门道很多,给你们一一分析...
热门文章
- 《FLUENT 14流场分析自学手册》——2.3 FLUENT14.5软件包的安装以及运行
- win10任务栏透明_Win7升Win10用不惯?让Win10秒变Win7的利器Start10
- 多尺度图像增强Retinex相关算法学习及实现
- D1,4CIF,CIF,QCIF各代表的分辨率大小
- 突破淘宝对于selenium检测
- JAVA课程设计——拼图小游戏
- Adobe Reader X 10.1.0
- C++ IE缓存管理研究
- 06 - 雷达发射机 概述
- Windows驱动开发(中间层)