数独生成算法
来源:互联网 发布:淘宝卖家刷一单10元 编辑:程序博客网 时间:2024/05/21 10:40
无关的话就不多说了,这是一个生成随机数独的算法,用Python写成的。当然,你也可以把它翻译成你喜欢用的语言,如果你有兴趣的话。如果只想要数独,不想管这程序的内容,你也可以跟我说一下,私信一下或怎样,我帮你生成一下也可以,数量是多少都可以的。这个算法,生成数独是需要概率的,但是不要担心概率的问题,像这种需要概率的问题,也就是需要时间,而,这程序运行的是特别快的,95秒运行10000次,生成了6001个数独,自己看看到底有多快吧。当然,俺的电脑也不差的嘞,Macbook Air。话休絮烦,直接来代码吧。
import randomimport timeclass Sudoku(object):def __init__(self):self.digits = [[] for i in range(9)]def make_digits(self):col_lists = [[] for i in range(9)]area_lists = [[] for i in range(3)]nine = self.random_nine()for i in range(9):col_lists[i].append(nine[i])area_lists[0] = nine[0:3]area_lists[1] = nine[3:6]area_lists[2] = nine[6:]for i in range(8):nine = self.random_nine()if i % 3 == 2:area_lists[0] = []area_lists[1] = []area_lists[2] = []for j in range(9):area_index = j // 3count = 0error = Falsewhile nine[0] in col_lists[j] or nine[0] in area_lists[area_index]:count += 1if count >= len(nine):error = Truebreaknine.append(nine.pop(0))if error:return Falsefirst = nine.pop(0)col_lists[j].append(first)area_lists[area_index].append(first)self.digits = col_listsreturn Truedef random_nine(self):nine = [i + 1 for i in range(9)]for i in range(5):nine.append(nine.pop(random.randint(0, 8)))return nineif __name__ == '__main__':sudoku = Sudoku()f = open('Digits.txt', 'a+')start = time.time()for i in range(500):loop = 0while not sudoku.make_digits():loop += 1if loop > 100:breakif loop < 100:print('No.{0} Sudoku Digits...'.format(i + 1))for col in sudoku.digits:for digit in col:f.write('{0} '.format(digit))f.write('\n')f.write('\n\n\n')f.close()print('{0} seconds used...'.format(int(time.time() - start)))
阅读全文
1 0
- 数独生成算法
- 数独生成算法
- 数独生成算法设计
- 数独生成算法实现
- 数独-- 一个高效率生成数独的算法
- 数独游戏的生成算法
- java数独生成算法(递归)
- 数独随机生成
- 求:数独的 生成 算法 Java代码
- 数独的生成和破解算法分析
- 数独的生成与破解算法分析
- 数独求解算法
- 数独算法
- 数独算法求解
- 数独算法
- 数独算法
- 数独算法
- 数独求解算法
- HDU 2448 Mining Station on the Sea(Floyd+最优匹配)
- linux awk使用
- Spring编程式事务管理
- python中与print有关的一些字符串控制
- 【Linux学习笔记】2:Linux命令基本格式
- 数独生成算法
- 5332. 【NOIP2017提高A组模拟8.23】密码 AC自动机+数位DP
- 数位DP Increasing or Decreasing
- 线性筛
- VisualVM连接远程主机的方式以及注意事项
- spss视图界面
- 关于C#编写x86与x64程序的分析
- 双倍回文(BZOJ-2342)(manacher+并查集)
- Kaldi WFST 构图 学习