本文实例讲述了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判断有效的数独算法示例相关推荐

  1. python图像数独_Python判断有效的数独算法示例

    本文实例讲述了Python判断有效的数独算法.分享给大家供大家参考,具体如下: 一.题目 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 1. 数字 1-9 在 ...

  2. python数独伪代码回溯法_数独的暴力回溯解法和Python GUI

    数独起源于18世纪初瑞士数学家欧拉等人研究的拉丁方阵,20世纪70年代,经过美国及日本学者的推广和改良,定名为数独(Sudoku),大致的意思是"独个的数字"或"只出现一 ...

  3. leetcode 36. 有效的数独 (将 9 * 9 数独划分成 9 宫格 )

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

  4. (附代码)数独大作业【读取数独,解数独,生成唯一解数独(随机,特定形状,不同难度生成),玩数独】

    注:未经同意不要转载. 上学期简单的做了一个数独程序,实现了一些功能,想简单的为大家提供的思路. 为了避免某些情况出现,具体代码暂时先不发了,有不太懂的地方可以评论提问啊. 下面是我的具体报告: 一, ...

  5. 输入数独题目,程序输出数独的唯一解。保证所有已知数据的格式都是合法的,并且题目有唯一的解。

    你一定听说过"数独"游戏. 如[图1.png],玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独 ...

  6. 漫画:算法如何验证合法数独 | 全世界最难的数独?

    今天是小浩算法 "365刷题计划" 第95天 .数独相信在座的各位都玩过,那我们如何使用程序去验证一个 9×9 的数独是有效的呢?一起看下! 01 PART 有效的数独 数独是源自 ...

  7. python数独伪代码回溯法_数独 #回溯算法 #CTF

    1. intro:巅峰极客的一道逆向 刷巅峰极客2020里的rev题fu!kpy,复杂得不行但是看到if d[1][0] != '8' or d[1][7] != '2'和if check(h1) ! ...

  8. python图像数独_Python图像识别+KNN求解数独的实现

    Python-opencv+KNN求解数独 最近一直在玩数独,突发奇想实现图像识别求解数独,输入到输出平均需要0.5s. 整体思路大概就是识别出图中数字生成list,然后求解. 输入输出demo 数独 ...

  9. java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用

    我们知道Java中的对象一般存放在堆中,但是总不能让这些对象一直占着内存空间,这些对象最终都会被回收并释放内存,那么我们如何判断对象已经成为垃圾呢?这篇文章会提出两种算法解决这个问题.另外,本文还要谈 ...

  10. php 识别图片主色调,PHP 判断图片主色调的简单示例

    这篇文章主要为大家详细介绍了PHP 判断图片主色调的简单示例,具有一定的参考价值,可以用来参考一下. 这段代码可以帮助你判断任意图片的主色调,使用了简单的统计算法实现 ,感兴趣的小伙伴,下面一起跟随5 ...

最新文章

  1. 工作5年后才明白的道理:不起眼的技能中,藏着你的未来
  2. SAP PP 启用了MRP Area之后MMBE有什么变化?
  3. JavaScript中null与undefined的比较
  4. 安装phpstudy之后发现80端口被占用
  5. MySQL relay log 详细参数解释
  6. .NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(上)...
  7. 定位position详解:relative与absolute
  8. maven缺失ojdbc6解决方案 :Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错
  9. Java使用Redis(jedis)
  10. 科研财务mysql相减_基于PHP和MySQL技术的地方高校科研管理系统的设计与实现
  11. livereload_使用LiveReload节省编码时间和精力
  12. C9:Unity3D制作智能家居设计软件——导入户型图自动设计(算法剖析+源码实现篇)
  13. TAOCP-Reading-计算机程序设计艺术阅读-1-2
  14. 【QGIS】无法定位程序输入点~于动态链接库~上
  15. 卡西欧计算器说明书获取方法
  16. Unity做360度的全景照片
  17. 百词斩2021高频题汇总 | 备战春招,刷这30题就够了!
  18. 公众号文章怎么制作?
  19. c语言指针 —— 面试题
  20. 郑大计算机专业多少分,2020年,郑大各专业分数线公布,里面门道很多,给你们一一分析...

热门文章

  1. 《FLUENT 14流场分析自学手册》——2.3 FLUENT14.5软件包的安装以及运行
  2. win10任务栏透明_Win7升Win10用不惯?让Win10秒变Win7的利器Start10
  3. 多尺度图像增强Retinex相关算法学习及实现
  4. D1,4CIF,CIF,QCIF各代表的分辨率大小
  5. 突破淘宝对于selenium检测
  6. JAVA课程设计——拼图小游戏
  7. Adobe Reader X 10.1.0
  8. C++ IE缓存管理研究
  9. 06 - 雷达发射机 概述
  10. Windows驱动开发(中间层)