python 实现计算数独

输入文件格式:

008309100
900060004
007504800
036000540
001000600
042000970
005907300
600010008
004608200

输出结果:

yuan
********************
0 0 8 3 0 9 1 0 0

9 0 0 0 6 0 0 0 4

0 0 7 5 0 4 8 0 0

0 3 6 0 0 0 5 4 0

0 0 1 0 0 0 6 0 0

0 4 2 0 0 0 9 7 0

0 0 5 9 0 7 3 0 0

6 0 0 0 1 0 0 0 8

0 0 4 6 0 8 2 0 0

********************
result
********************
4 2 8 3 7 9 1 6 5

9 5 3 8 6 1 7 2 4

1 6 7 5 2 4 8 3 9

8 3 6 7 9 2 5 4 1

7 9 1 4 3 5 6 8 2

5 4 2 1 8 6 9 7 3

2 8 5 9 4 7 3 1 6

6 7 9 2 1 3 4 5 8

3 1 4 6 5 8 2 9 7

 1 cellArray=[]
 2 rowMax=9
 3 columnMax=9
 4 def pre():
 5     with open(r"C:\Python27\sd.txt") as infile:
 6         l=[s for s in infile]
 7     for i in range(rowMax):
 8         rowArray=[]
 9         for j in range(columnMax):
10             c=Cell(i,j)
11             c.value=int(l[i][j])
12             rowArray.append(c)
13         cellArray.append(rowArray)
14
15 def mynext(c):
16     if c.row+1<rowMax:
17         row=c.row+1
18         column=c.column
19         return cellArray[row][column]
20     elif c.column+1<columnMax:
21         row=0
22         column=c.column+1
23         return cellArray[row][column]
24     else:
25         return None
26
27 class Cell:
28     def __init__(self,row,column):
29         self.row=row
30         self.column=column
31         self.value=0
32     def __str__(self):
33         return str(self.row)+":"+str(self.column)+":"+str(self.value)
34
35 def setCellValue(cell):
36     if cell==None:
37         return True
38     if cell.value==0:
39         canList=[1,2,3,4,5,6,7,8,9]
40         blockCheck(canList,cell)
41         rowCheck(canList,cell)
42         columnCheck(canList,cell)
43         if len(canList) ==0:
44             return False
45         for canNum in canList:
46             cell.value=canNum
47             res=setCellValue(mynext(cell))
48             if res:
49                 return True
50         cell.value=0
51         return False
52     else:
53         return setCellValue(mynext(cell))
54 def blockCheck(canList,cell):
55     blockrow=cell.row/3
56     blockcolumn=cell.column/3
57     for i in range(blockrow*3,(blockrow+1)*3):
58         for j in range(blockcolumn*3,(blockcolumn+1)*3):
59             cvalue=cellArray[i][j].value
60             if cellArray[i][j].value==0:
61                 continue
62             if cvalue in canList:
63                 canList.remove(cvalue)
64
65 def rowCheck(canList,cell):
66     for i in range(columnMax):
67         cvalue=cellArray[cell.row][i].value
68         if cvalue==0:
69             continue
70         if cvalue in canList:
71             canList.remove(cvalue)
72
73 def columnCheck(canList,cell):
74     for i in range(rowMax):
75         cvalue=cellArray[i][cell.column].value
76         if cvalue==0:
77             continue
78         if cvalue in canList:
79             canList.remove(cvalue)
80
81 print ‘yuan‘
82 print ‘*‘*20
83 pre()
84 for i in range(rowMax):
85     for j in range(columnMax):
86         print str(cellArray[i][j].value),
87     print "\n"
88
89 print ‘*‘*20
90 print ‘result‘
91 print ‘*‘*20
92 setCellValue(cellArray[0][0])
93 for i in range(rowMax):
94     for j in range(columnMax):
95         print str(cellArray[i][j].value),
96     print "\n"

python 实现计算数独

时间: 2024-10-25 13:49:11

python 实现计算数独的相关文章

Python科学计算之Pandas

Reference: http://mp.weixin.qq.com/s?src=3&timestamp=1474979163&ver=1&signature=wnZn1UtWreFWjQbpWweZXp6RRvmmKwW1-Kud3x6OF0czmyPqv*F6KzQ1i-dKhi4D-QvDjp1mFDdqAHLPrCLgMOb1KXJcbbkU5-QAREDarkCaPumjQlORzVAOma541S0X2MGgysuH18DI2567rBcTSkMHPsVf6sxClfB

windows下安装python科学计算环境,numpy scipy scikit等

背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器学习模块,包括分类.回归.聚类系列算法,主要算法有SVM.逻辑回归.朴素贝叶斯.Kmeans.DBSCAN等,目前由INRI 资助,偶尔Google也资助一点. SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化.线性代数.积分.插值.特殊函数.快速傅里叶变换.信号处理和图像处理.常微分方程求解和其他科学与工程中常用的计算.其功能与软件MA

python科学计算

windows下python科学计算库的下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/(由于C运行库的问题,scipy在linux下可以用pip安装,而windows下不行) matpoltlib:绘图 numpy:矩阵运算 scipy:科学计算,高阶抽象和物理模型 sklearn:科学计算,多种聚类算法. 数据拟合:http://blog.csdn.net/lsldd/article/details/41251583 遗传算法:http://bl

Python科学计算(二)windows下开发环境搭建(当用pip安装出现Unable to find vcvarsall.bat)

用于科学计算Python语言真的是amazing! 方法一:直接安装集成好的软件 刚开始使用numpy.scipy这些模块的时候,图个方便直接使用了一个叫做Enthought的软件.Enthought是一家位于美国得克萨斯州首府奥斯汀的软件公司,主要使用Python从事科学计算工具的开发.Enthought里面包含了很多库,不需要你自己安装就可以直接使用了. 其实还又很多Python科学计算的集成软件,比如Python(x, y)和WinPython,个人感觉WinPython还是不错的,里面包

linux中安装python科学计算环境-numpy、scipy、matplotlib、OpenCV...

http://blog.csdn.net/pipisorry/article/details/39902327 在Ubuntu中安装numpy.scipy.matplotlib.OpenCV等 和Python(x,y)不一样,在Ubuntu中需要手工安装科学计算的各个模块, 如何安装IPython, NumPy, SciPy, matplotlib, PyQt4, Spyder, Cython, SWIG, ETS, OpenCV: 在Ubuntu下安装Python模块通常可以使用apt-get

目前比较流行的Python科学计算发行版

经常有身边的学友问到用什么Python发行版比较好? 其实目前比较流行的Python科学计算发行版,主要有这么几个: Python(x,y) GUI基于PyQt,曾经是功能最全也是最强大的,而且是Windows系统中科学免费Python发行版的不二选择.不过今时已不同往昔! PythonXY里面的许多包为了兼容性的问题,无法使用最新的程序包.尤其是令人气愤的是MinGW到现在还是古董级的4.5版本,而TDM-GCC现在都4.8.1-3了.不过这个包在你安装了之后,除了占用较大的磁盘空间之外,基本

python 分词计算文档TF-IDF值并排序

文章来自于我的个人博客:python 分词计算文档TF-IDF值并排序 该程序实现的功能是:首先读取一些文档,然后通过jieba来分词,将分词存入文件,然后通过sklearn计算每个分词文档中的tf-idf值,再将文档排序输入一个大文件中 依赖包: sklearn jieba 注:此程序参考了一位同行的程序后进行了修改 # -*- coding: utf-8 -*- """ @author: jiangfuqiang """ import os

java程序计算数独游戏

兴趣来了,写了个简单的数独游戏计算程序,未做算法优化. 通过文件来输入一个二维数组,9行,每行9个数组,数独游戏中需要填空的地方用0来表示.结果也是打印二维数组. 1 import java.io.File; 2 import java.util.List; 3 //代表数独中的一个单元格位置 4 public class Cell { 5 6 // 所在行 7 public int row; 8 // 所在列 9 public int colum; 10 // 值 11 public int

Python科学计算(两)——时域波形和正弦信号的频谱

Python科学计算(两)-- 时域和频域波形为正弦波形信号生成.计算和显示 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as pl import matplotlib import math import random row = 4 col = 4 N = 500 fs = 5 n = [2*math.pi*fs*t/N for t in range(N)] axis_x = np.linspace(