资源简介
利用Python程序求解任意可解数独,同时输出整个求解过程,文件中包含几个测试用例,其中有世界最难数独的求解结果
代码片段和文件信息
import os
import numpy as np
def deep_copy(nparray):
assert np.ndim(nparray) == 2 ““
shape = np.shape(nparray)
ret = np.zeros(shape dtype=np.object)
for i in range(shape[0]):
for j in range(shape[1]):
ret[i j] = nparray[i j].copy()
return ret
def get_cell_index(row col):
ret_index = [0 0]
if 3 <= row < 6:
ret_index[0] = 1
elif row >= 6:
ret_index[0] = 2
if 3 <= col < 6:
ret_index[1] = 1
elif col >= 6:
ret_index[1] = 2
return ret_index
def check_row(num array row):
if len(np.where(array[row :] == num)[0]) == 0:
return True
return False
def check_col(num array col):
if len(np.where(array[: col] == num)[0]) == 0:
return True
return False
def check_cell(num array row col):
cell_index = get_cell_index(row col)
if len(np.where(array[cell_index[0]*3:(cell_index[0]+1)*3
cell_index[1]*3:(cell_index[1]+1)*3] == num)[0]) == 0:
return True
return False
def start_init(array):
lengths = np.zeros([9 9]) # 每个位置可能填写的值的个数
may_nums = np.zeros([9 9] dtype=list) # 每个位置可能填写的所有值组成的list
for i in range(9):
for j in range(9):
if array[i j] > 0:
may_nums[i j] = []
continue
may_nums[i j] = [k for k in range(1 10)
if check_row(k array i)
and check_col(k array j)
and check_cell(k array i j)]
lengths[i j] = len(may_nums[i j])
return lengths may_nums
def update_maynums(lengths may_nums row col val):
for i in range(9):
if i == row:
continue
if val in may_nums[i col]:
may_nums[i col].remove(val)
lengths[i col] -= 1
if lengths[i col] == 0:
return True
for i in range(9):
if i == col:
continue
if val in may_nums[row i]:
may_nums[row i].remove(val)
lengths[row i] -= 1
if lengths[row i] == 0:
return True
cell_index = get_cell_index(row col)
for i in range(cell_index[0] * 3 (cell_index[0] + 1) * 3):
for j in range(cell_index[1] * 3 (cell_index[1] + 1) * 3):
if i == row and j == col:
continue
if val in may_nums[i j]:
may_nums[i j].remove(val)
lengths[i j] -= 1
if lengths[i j] == 0:
return True
return False
# return lengths may_nums
def check_only_chance_rows(array lengths may_nums per_step outf):
updated = False
wrong = False
for i in range(9):
may_nums_row = may_nums[i 0]
length = len(may_nums_row)
only_chance_index = list()
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 12862 2018-12-23 00:18 sudoku_v3.py
文件 444805 2019-01-23 23:30 sudoku_inputs\hardest.res
文件 169 2018-12-22 10:41 sudoku_inputs\hardest.txt
文件 12208 2018-12-22 10:36 sudoku_inputs\大师10.res
文件 169 2018-12-22 10:36 sudoku_inputs\大师10.txt
文件 11118 2018-12-21 23:54 sudoku_inputs\大师3.res
文件 169 2018-12-21 23:36 sudoku_inputs\大师3.txt
文件 11554 2018-12-22 00:43 sudoku_inputs\大师4.res
文件 169 2018-12-21 15:43 sudoku_inputs\大师4.txt
文件 11554 2018-12-22 10:27 sudoku_inputs\大师5.res
文件 169 2018-12-22 10:18 sudoku_inputs\大师5.txt
文件 11772 2018-12-22 10:29 sudoku_inputs\大师9.res
文件 169 2018-12-22 10:29 sudoku_inputs\大师9.txt
目录 0 2019-01-23 23:30 sudoku_inputs
----------- --------- ---------- ----- ----
516887 14
- 上一篇:python程序设计基础课件
- 下一篇:12306爬虫实现
相关资源
- 12306爬虫实现
- python程序设计基础课件
- 西电python网络处理上机题答案
- VMD变分模态分解算法
- Python网络编程 3版 高清扫描版 完整中
- 使用python编写的打飞机游戏源码
- 计算24点python
- 扑克小游戏python代码
- Python黑客攻防入门.pdf
- 《Python语言程序设计基础第二版PDF+课
- Python-PySimpleGUI一个建立在tkinter之上简
- python3.5 百度ai人脸识别
- python编程从入门到实践的案例和动手
- 编译原理词法分析器、语法分析器p
- python3实现的国密SM2+SM3
- 50G金融资料包python源码包
- Python爬虫相关书籍.zip
- Windows64下通过python调用海康SDK实现登
- Python-使用DeepFakes实现YouTube视频自动换
- python_web实战-源码
- Python-100-Days-master.zip
- python与量化投资-从基础到实战 配套资
- python sklearn决策树
- 电影推荐系统171901
- Mofan莫烦python全部教程代码
- 工程训练大赛openmv二维码、色环、色
- 豆瓣电影排行爬虫
- Python语言程序设计基础 第二版 pdf书籍
- Python和Pygame游戏开发
- Python for data analysis(第二版中文版代
评论
共有 条评论