• 问题:
    需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。数独的答案都是唯一的,所以,多个解也称为无解。要求就是能够输入数独题目(留有接口),程序输出数独的唯一解。
  • 解题思路
    Sudoku 是一种数学游戏,把一个9行9列的棋盘分为9个3x3的方块,在棋盘上填入1~~9这九个数字,使得每行(row)每列(column)每块(block)的9个格子内数字不重复。用n个符号(通常是1~n的整数)排成n行n列的方阵,如果每一行和每一列都没有重复的符号,就称为一个n阶拉丁方Sudoku 是特殊的9阶拉丁方。9阶拉丁方约有5.52E+27种可能,而Sudoku增加了“block内数字不重复”这一约束,其数目要远少于此。Sudoku 游戏通常会给一些提示(约束),在某些格子上事先填好数字,然后让游戏者填完其余的格子。如果一个提示都没有,任由游戏者发挥,那么一共有大约6.67E+21种不同的答案.虽然没有严格的证明,但似乎至少要有17个提示(事先填好17个数)才能确保答案是唯一的。另外借助通过计算机搜索,目前还没有找到只要16个提示就能保证答案唯一的Sudoku题目。
  • 一个 Sudoku 问题可以通过以下变换转换为等价的Sudoku问题:
    1.数字排列,例如1换为2,2换为4,4换为1等等。共有9! = 362880种排列方式。
    2.排列同一块中的行,例如第1行与第2行互换,第4行与第6行互换。(但第3行不能与第4行互换。)每块有3!=6种行排列方式,而且块内的行排列是独立的,与其他块无关,因此共有6^3=216种。
    3.排列同一块中的列,例如第1列与第3列互换等等。每块有3!=6种列排列方式,而且块内的列排列是独立的,与其他块无关,因此共有6^3=216种。
    4.整块的行排列,例如第13行整体与46行互换。一共有3!=6种排列方式。
    5.整块的列排列,例如第13列整体与79列互换。一共有3!=6种排列方式。
    6.转置(行列互换),有2种可能。
    这并不意味着每个Sudoku问题可变出9! x 6^8 x 2个等价问题。因为某些变换不一定能产生新的问题,而某些变换会产生重复的新问题。例如考虑只有对角线上有数字的Sudoku问题,那么转置就不能变出新 问题;再考虑只有第一行有数字的sudoku问题,用第3、5变换产生的新问题都能由第1变换得到。

代码

arrary = []
for i in range(9):arrary.append(list(map(int, input())))def start_pos(arrary):  # 寻找空白的位置for x in range(9):for y in range(9):if arrary[x][y] == 0:  # 如果数字为0,则返回数字的坐标return x, yreturn False, False  # 否则返回Falsedef get_next(arrart, x, y):  # 寻找下一个空白的位置for next_y in range(y + 1, 9):if arrary[x][next_y] == 0:return x, next_yfor next_x in range(x + 1, 9):for next_y in range(0, 9):if arrary[next_x][next_y] == 0:return next_x, next_yreturn -1, -1  # -1表示后面已经没有空白的位置了def value(arrary, x, y):  # 需要保证每个横排和竖排以及九宫格内无相同数字i, j = x // 3, y // 3gird = [arrary[i * 3 + r][j * 3 + c] for r in range(3) for c in range(3)]v = set([x for x in range(1, 10)]) - set(gird) - set(arrary[x]) - \set(list(zip(*arrary))[y])return list(v)def try_sudoku(arrary, x, y):  # 填写数独的函数for v in value(arrary, x, y):arrary[x][y] = vnext_x, next_y = get_next(arrary, x, y)if next_y == -1:return Trueelse:end = try_sudoku(arrary, next_x, next_y)if end:return Truearrary[x][y] = 0def func(arrary):  # 主函数x, y = start_pos(arrary)try_sudoku(arrary, x, y)for line in arrary:print(''.join(list(map(str, line))))func(arrary)

运算结果

"""
输入实列:
439060281
600042753
257018096
500080069
080104507
901025034
160409308
700030602
843276015
"""
"""
输出结果:
439567281
618942753
257318496
524783169
386194527
971625834
162459378
795831642
843276915
"""

用python实现数度游戏相关推荐

  1. python猜数字小游戏制作

    教大家做一个简易的猜数字的游戏,但确实蛮简单的,我这个四年级的小盆友也才学了一天,所以给那些不会的教一下. 我们先来看导入模块: """ 简易python猜数小游戏&qu ...

  2. ✨数织游戏✨:Python 制作的成本一毛钱却诚意满满的小礼物!!

    前文 今天就是七夕了,晓得你们有对象的或者正在追妹子的,肯定又在绞尽脑汁想买什么别出新裁的礼物,如果女生感觉你的礼物花心思了,那肯定是好感度倍增啊. 今天给各位分享一个用 Python 制作的成本一毛 ...

  3. python猜数游戏续_python猜数游戏续改编

    answer=456 n=input('Enteranumber:') correct=len([iforiinnifiinstr(answer)]) exact=len([afora,binzip( ...

  4. python制作的简单的猜数小游戏

    今天花了一点时间用python写了个猜数小游戏,10分钟就能搞定! 废话不多说,直接上代码 由于代码太过于简单,所以没有什么注释. import randomprint("欢迎来到猜数小游戏 ...

  5. python猜数游戏实验报告_python实现猜数游戏

    本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 一.问题描述: 使用python开发一个猜数小游戏,程序随机产生0~1024之间的数字,用户输入猜测数字,程序告诉用户 ...

  6. python猜数游戏设计原理_python基础-猜数游戏

    一.问题描述: 使用python开发一个猜数小游戏,程序随机产生0~1024之间的数字,用户输入猜测数字,程序告诉用户猜大了还是小了.在一定次数内猜对用户获胜,否则用户失败. 每一轮游戏要求用户输入用 ...

  7. python逻辑运算的一些流程图_Python猜数小游戏

    使用random变量随机生成一个1到100之间的数 采集用户所输入的数字,如果输入的不符合要求会让用户重新输入. 输入符合要求,游戏开始.如果数字大于随机数,输出数字太大:如果小于随机数,输出数字太小 ...

  8. python做一个小游戏_12岁的少年教你用Python做小游戏

    你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂!在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作为英雄,需要在城堡里抵御獾的进攻. 为了写这个游戏的代码,你将会 ...

  9. python能做什么游戏-12岁的少年教你用Python做小游戏

    你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作为英雄,需要在城堡里抵御獾的进攻. 为了写这个游戏的代码,你将 ...

  10. python编的俄罗斯方块游戏下载_python写的俄罗斯方块游戏

    python写的俄罗斯方块游戏 功能包括:记录所花费时间;消去的总行数;总分;排行榜,最高记录查看等. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等. from Tkinter ...

最新文章

  1. 全面讲解电脑主板-图文
  2. python 提取前五行_Pandas 1:如何在Python中载入数据集
  3. Navicat Premium创建MySQL存储过程
  4. sqlite insert数据要用“?”代替“%s”
  5. 驱动框架2——内核驱动框架中LED的基本情况、初步分析
  6. C++11 并发指南三(Lock 详解)
  7. mysql数据表设计 对应成二维数组_结果集数据怎么转换成二维数组
  8. python字符串方法总结_python字符串函数总结
  9. STM32 rtc唤醒 低功耗待机模式 避免iwdog看门狗方案
  10. uCos中的信号量机制
  11. 深度linux u盘安装教程,deepin 2014 u盘安装教程:u盘安装deepin2014步骤
  12. 如何选择适合你的兴趣爱好(六),钢琴
  13. 买房应该全款还是贷款
  14. 【水果识别】形态学水果识别(含识别率)【含GUI Matlab源码 907期】
  15. 如何将单页面转化成手机版_【Mac分享】全套Adobe for mac(pojie版)
  16. Firefox启动自带翻译
  17. PostgreSQL分区
  18. 微信第三方登录redirect_uri 参数错误
  19. php生成占位图,Laravel4创建一个占位图片服务例子
  20. geetest php,Laravel 使用极验(Geetest)

热门文章

  1. l计算机等级考试电子邮箱填写什么,计算机等级考试详解:电子邮箱的地址组成结构!...
  2. java中是什么意思_java中@什么意思
  3. win10, cuda 9.0, python 3.5环境下复现 Flow-Guided Feature Aggregation for Video Object Detection 问题总结
  4. 别墅家庭无线WiFi覆盖解决方案
  5. C语言wifi程序代码,STM32F103 WIFI程序 C语言.docx
  6. 云笔记+心情日记类APP推荐
  7. 科技爱好者周刊(第 118 期):高考志愿怎么填
  8. JAVA公司网站系统毕业设计 开题报告
  9. C++SLT入门简介
  10. 企业微信发送、撤回消息 java代码