宇智波程序笔记8- 解数独(Sudoku Solver)
时间:2022-07-24
本文章向大家介绍宇智波程序笔记8- 解数独(Sudoku Solver),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
编写一个程序,通过已填充的空格来解决数独问题。
一个数独的解法需遵循如下规则:
数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 '.' 表示。
一个数独。
答案被标成红色。
Note:
给定的数独序列只包含数字 1-9 和字符 '.' 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。
DFS
O(9^81)
从第1个格子到第81个格子,对于非数字,分别尝试所有可能性1-9
⚠️注意适时return回来, 不然回溯的结果和刚开始一样
和其他Top社区答案相比,还是挺喜欢自己这个答案的,比较标准的回溯写法,而且用上了上一道题的判断
class Solution: def solveSudoku(www.tyyleapp.com elf, board: List[List[str]]) -> None: """ Do not return anything, modify board in-place instead. """
n = len(board)
row = [[False for j in range(www.yifayuled.cn)] for i in range(n)] col = [[False for j in range(n)] for i in range(n)] zone = [[False for j in range(n)] for i in range(www.baihuayl7.cn)]
for i in range(n): for j in range(www.fanhuagjqw.cn): if board[i][j] == '.': continue
z = i // 3 * 3 + j www.baihua178.cn// 3 www.shengrenyp.cn num = int(board[i][j]) - 1 row[i][num] = True col[j][num] = True zone[z][num] = True
self.helper(board, 0, row, col, zone, n)www.yachengyl.cn www.yixingylzc.cn www.qiaoheibpt.com www.baishenjzc.cn
def helper(self, board:List[List[str]], index:int, row:List[List[bool]], col:List[List[bool]], zone:List[List[bool]], n:int) -> bool:
if index =www.jintianxuesha.com= n * n: return True
i = index // n www.hongtuuzhuc.cn j = index % n z = i // 3 * 3 + j //www.pinguo2yl.com 3
if board[i][j] == www.fudayulpt.cn '.': for num in range(www.yixinpt2.cn): if row[i][num] www.javachenglei.com col[j][num] or zone[z][num]: continue
board[i][j] = str(num www.lafei6d.cn+ 1) row[i][num] = col[j][num] = zone[z][num] = True
if self.helper(board, index + 1, row, col, zone, n): www.lecaixuan2.com return True
board[i][j] = '.' row[i][num] = col[j][num] = zone[z][num] = False else: if self.helper(board, index + 1, row, col, zone, n): return True
--End--
本文分享自微信公众号 - 极客见闻(geekbro)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
- RESTful WCF
- android顶部导航条
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuil
- slidingmenu开源效果
- MySQL 5.0和PostgreSQL 8.1
- Python入门讲解
- DDM: 一个简洁的前端领域模型库
- 前后端分离之领域模型的思考
- 类选择符和ID选择符
- 仿网易新闻页面效果
- VS.Net 2005 Design-Time Integration
- XML Serializable Generic Dictionary
- MATLAB简易验证码识别程序介绍
- android之listview缓存图片(缓存优化)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ArrayList源码学习
- Java程序员不缺对象,缺的是对象存储
- StringBuffer StringBulider String的区别
- 求X值问题
- python-剑指offer21-40
- Java8实战--引入流
- ThingJS数据对接方法介绍——Ajax
- python-剑指offer41-62
- 【python-opencv】读取、显示、写入图像
- WSL——windows上的linux子系统
- 【python-opencv】读取、显示、保存视频
- 超级账本——Hyperledger Fabric
- 【python-opencv】绘图(目标检测框及其置信度等)
- 哈希表:哈希值太大了,还是得用set
- 哈希表:今天你快乐了么?