python自动解数独教学(Python判断有效的数独算法示例)
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程序设计有所帮助。
原文链接:https://blog.csdn.net/linfeng886/article/details/82778890
- python与php比较(浅谈php调用python文件)
- python自带的ide的使用(基于python的ini配置文件操作工具类)
- python数据分析删除重复值(Python3实现从排序数组中删除重复项算法分析)
- python停止执行的代码(python定时检测无响应进程并重启的实例代码)
- python函数操作大全(Python的高阶函数用法实例分析)
- python学生信息管理系统教程(学生信息管理系统Python面向对象版)
- mongodb python教程(python使用pymongo操作mongo的完整步骤)
- python多进程与多线程详解(Python线程之定位与销毁的实现)
- python编写计算机病毒教程(Python告诉你木马程序的键盘记录原理)
- python正式参数(详解Python的三种可变参数)
- python函数参数讲解(Python高级特性与几种函数的讲解)
- python最简单实例(Python文件打开方式实例详解a、a+、r+、w+区别)
- python获取特定时间日期的数据(Python提取特定时间段内数据的方法实例)
- python云服务技术(Python脚本修改阿里云的访问控制列表的方法)
- python变量指向讲解(详解python中init方法和随机数方法)
- 用python制作一个简单的小程序(一个可以套路别人的python小程序实例代码)
- 大女主 汤唯垂青电视圈,搭档朱亚文出演《大明皇妃孙若微传》(汤唯垂青电视圈)
- 红色代表什么(红色代表什么情感和含义)
- 高中数学题(高中数学题型总结及解题方法)
- 冰岛旅游攻略(冰岛旅游攻略及花费)
- 为什么现在年轻人越来越喜欢买衣服(为什么现在年轻人越来越喜欢买衣服穿)
- 怎么做好SEO(怎么做好seo内容优化)
热门推荐
- 阿里云linux服务器怎么进(阿里云Linux主机安装WDCP管理面板包含lamp+lnmp+lanmp环境)
- dedecms替代方案(DedeCMS投票模块漏洞解决方法)
- sqlserver删除表的第一行数据(sql server删除前1000行数据的方法实例)
- Oracle TO_CHAR的使用
- laravel模型使用技巧(提高Laravel应用性能方法详解)
- nginx跳转规则配置上下文(基于nginx实现上游服务器动态自动上下线无需reload的实现方法)
- jscanvas背景色(JavaScript canvas实现代码雨效果)
- laravel授权使用方法(Laravel 自带的Auth验证登录方法)
- 修改sqlserver数据库名称步骤(SQL server数据库创建代码 filegroup文件组修改的示例代码)
- python实现七个基本算法(python实现维吉尼亚算法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9