百度上有个最难数独, 用python跑它

直接上代码
#!/usr/bin/python3
#coding=GB2312
import tkinter as tk
import threading
import time
import random
import copy
import sys class Sudoku(threading.Thread):
winw = 500
winh = 510 def __init__(self):
threading.Thread.__init__(self)
self.ui = tk.Tk()
self.centerDisplay()
self.cells = []
self.createSudoku() self.initUi()
def checkRow(self, row, value):
if value in self.tmpCells[row]:
return False
return True
def checkCol(self, col, value):
for row in range(9):
if value == self.tmpCells[row][col]:
return False
return True
def checkBlock(self, row, col, value):
for i in range(3):
for j in range(3):
if value == self.tmpCells[int(row / 3) * 3 + i][int(col / 3) * 3 + j]:
return False
return True
def solveSudoku(self):
for i in range(9):
for j in range(9):
if 0 == self.tmpCells[i][j]:
for tmp in range(1, 10):
if(self.checkRow(i, tmp) and \
self.checkCol(j, tmp) and \
self.checkBlock(i, j, tmp)):
self.tmpCells[i][j] = tmp
if (self.solveSudoku()):
return True
else:
self.updateUi()
self.tmpCells[i][j] = self.cells[i][j]
continue
else:
continue
return False
return True def createSudoku(self):
#self.cells = [[None for i in range(9)] for i in range(9)]
self.cells = [\
[0, 0, 5, 3, 0, 0, 0, 0, 0], \
[8, 0, 0, 0, 0, 0, 0, 2, 0], \
[0, 7, 0, 0, 1, 0, 5, 0, 0], \
[4, 0, 0, 0, 0, 5, 3, 0, 0], \
[0, 1, 0, 0, 7, 0, 0, 0, 6], \
[0, 0, 3, 2, 0, 0, 0, 8, 0], \
[0, 6, 0, 5, 0, 0, 0, 0, 9], \
[0, 0, 4, 0, 0, 0, 0, 3, 0], \
[0, 0, 0, 0, 0, 9, 7, 0, 0]]
self.tmpCells = copy.deepcopy(self.cells) def initUi(self):
self.cs = tk.Canvas(self.ui, bg = '#7fb081')
self.cs.pack(fill = tk.BOTH, expand = 1)
w = self.winw / 9.0
h = self.winh / 9.0
for n in range(9):
if 0 == n % 3:
width = 4
else:
width = 1
self.cs.create_line(0, n * h, self.winw, n * h, \
width = width, fill = '#2b4490')
self.cs.create_line(n * w, 0, n * w, self.winh, \
width = width, fill = '#2b4490')
for i in range(9):
for j in range(9):
if self.cells[i][j]:
self.cs.create_text(30 + j * 55, 30 + i * 57, \
font = ('Times -55 bold'), text = self.cells[i][j])
def updateUi(self):
self.cs.delete('test')
for i in range(9):
for j in range(9):
if not self.cells[i][j] and self.tmpCells[i][j]:
self.cs.create_text(30 + j * 55, 30 + i * 57, \
font = ('Times -55 bold'), text = self.tmpCells[i][j], \
tag = 'test', fill = '#aa363d') def centerDisplay(self):
screenw = self.ui.winfo_screenwidth()
screenh = self.ui.winfo_screenheight()
self.ui.geometry('{}x{}+{}+{}'.format(\
self.winw, self.winh, int((screenw - self.winw)/2), \
int((screenh - self.winh)/2)))
self.ui.title('Sudoku by jianc') def run(self):
print(self.solveSudoku()) self.updateUi() sys.setrecursionlimit(100000)
sudoku = Sudoku()
sudoku.start()
tk.mainloop()
百度上有个最难数独, 用python跑它的更多相关文章
- swoft| 源码解读系列一: 好难! swoft demo 都跑不起来怎么破? docker 了解一下呗~
title: swoft| 源码解读系列一: 好难! swoft demo 都跑不起来怎么破? docker 了解一下呗~description: 阅读 sowft 框架源码, swoft 第一步, ...
- ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库
ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库. 与现有的主要针对监督任务设计的深度学习库不同,ZhuSuan 的特点是深入到贝叶斯推理中,从而支持各种生成模式:传 ...
- Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!
Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!
- 史上最详细的C语言和Python的插入排序算法
史上最详细的C语言和Python的插入排序算法插入排序原理:所谓插入排序,就像我们在打牌(斗地主)时,整理我们自己手中自己的牌一样,就像是2,1,3,9,J,K,5,4,这四张牌.我们要把它其中的几张 ...
- 在Ubuntu 18.04上安装OpenCV 4(C ++和Python)
OpenCV于11月20日发布了OpenCV-3.4.4和OpenCV-4.0.0.这些版本中有很多错误修复和其他更改.发布重点如下: OpenCV现在是C ++ 11库,需要符合C ++ 11标准的 ...
- 百度上传插件WebUploader,angularjs指令封装
1.WebUploader特点 官网地址:http://fex.baidu.com/webuploader/ 1.1 分片.并发 分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上 ...
- 百度上传插件---webuploader的使用
需求:朋友让找一个兼容IE8的上传插件,卧槽,IE8,我当时是崩溃的,然后就搜到了这个百度的插件,官网是这样描述的 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HT ...
- [转载] 百度上传&下载脚本
下载百度网盘中的文件,最简单的办法是使用wget命令.找到百度网盘文件,点击下载,然后找到相应的下载地址,复制链接地址即可.但这种方法有一个bug,因为百度云网盘访问文件的链接地址是动态的,当文件比较 ...
- 百度上传工具webuploader,图片上传附加参数
项目中需要上传视频,图片等资源.最先做的是上传图片,开始在网上找了一款野鸡插件,可以实现图片上传预览(无需传到后台).但是最近这个插件出了莫名的问题,不易修复,一怒之下,还是决定找个大点的,靠谱的插件 ...
随机推荐
- Linux配置Selenium+Chrome+Python
---恢复内容开始--- 最近一个月没有更新博客了.最近都在复习LINUX与PYTHON知识.决定以后在LINUX环境下学习新知识. 包括后期的框架学习与平台知识方面. 直接记录今天下午的学习成果. ...
- wxparse使用(富文本插件)
优点:目前已知唯一可以转化HTML到小程序识别的插件 缺点:转换一个HTML标签可能需要大量的微信小程序标签还有样式 配置:第一步,下载 https://github.com/icindy/wxPar ...
- 项目搭建(二):NUnit&TestStack.White
一.单元测试框架NUnit NUnit是所有.net语言的单元测试框架.使用C#语言编写. 测试框架:NUnit3 1. 安装NuGet包管理器 2. 在NuGet中安装NUnit.NUnit.Con ...
- HDU 1028 Ignatius and the Princess III (生成函数/母函数)
题目链接:HDU 1028 Problem Description "Well, it seems the first problem is too easy. I will let you ...
- HDU 1205 吃糖果 (鸽巢原理)
题目链接:HDU 1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢 ...
- PAT_A1071#Speech Patterns
Source: PAT A1071 Speech Patterns (25 分) Description: People often have a preference among synonyms ...
- 中介者模式(Mediator Pattern)
用于减少多个对象或类之间的通信复杂性. 此模式提供了一个中介类,它通常处理不同类之间的所有通信,并支持通过松散耦合来维护代码.中介者模式属于行为模式类别. 实现实例 在这里通过一个聊天室的示例来演示中 ...
- python列表之添加、修改和删除元素
修改列表中的元素: subject= ['math', 'Chinese', 'English'] subject[0] = 'history' # 列表名[要修改元素的下标]=修改后的元素 prin ...
- 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?
Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...
- C#设计模式V2(1)——单例模式
出自:https://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设计 ...