百度上有个最难数独, 用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,图片上传附加参数
项目中需要上传视频,图片等资源.最先做的是上传图片,开始在网上找了一款野鸡插件,可以实现图片上传预览(无需传到后台).但是最近这个插件出了莫名的问题,不易修复,一怒之下,还是决定找个大点的,靠谱的插件 ...
随机推荐
- UPLOADIFY用法
把下面代码 this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url); this.settings.but ...
- 112、TensorFlow初始化变量
# 创建一个变量 # 最简单创建一个变量的方法就是调用 tf.get_variable function import tensorflow as tf # 下面创建了一个三维的张量大小是 [1,2, ...
- windows10激活
(1).首先,我们先查看一下Win10正式专业版系统的激活状态:按住win+r键,运行命令提示符,输入slmgr.vbs -xpr,点击确定,查看系统的状态是什么时候到期或者是处于通知状态. (2). ...
- 通过注册表修改IE的Internet选项
Internet Explorer 安全区域设置存储在以下注册表子项下面: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\I ...
- spring data jpa 多对多查询
package com.ytkj.dao; import com.ytkj.entity.Customer; import com.ytkj.entity.Role; import org.sprin ...
- POJ 2112 /// 最大流+floyd+二分
题目大意: 有 k台挤奶机 和 c头奶牛 每台挤奶机最多为m头奶牛服务 给定所有挤奶机和奶牛两两之间的距离 求一种分配 使得 奶牛与挤奶机之间的最远距离 最小化 floyd求得所有挤奶机与奶牛两两之间 ...
- WPF-将DataGrid控件中的数据导出到Excel
原文:WPF-将DataGrid控件中的数据导出到Excel 导出至Excel是非常常见,我们可以用很多类库,例如Aspose.NOPI.Interop,在这里我们使用微软自家的工具.我的WPF绑定的 ...
- RabbitMQ 在 Win10 环境下的安装与配置
1 RabbitMQ 环境配置 1.1 ErLang 下载安装 RabbitMQ 需要 ErLang 环境支持:首先下载 ErLang 并安装. 建议使用新版本,版本过低存在与 Rab ...
- chrome浏览器屏蔽广告插件小例子
1.创建一个文件夹,名为"清除页面广告插件" 2.在文件夹内创建"manifest.json"文件, { "name": "第一个 ...
- eclipse maven install后查看报错信息