你一定听说过“数独”游戏。

如【图1.png】,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。

数独的答案都是唯一的,所以,多个解也称为无解。

本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。

本题的要求就是输入数独题目,程序输出数独的唯一解。我们保证所有已知数据的格式都是合法的,并且题目有唯一的解。

格式要求:
输入9行,每行9个数字,0代表未知,其它数字为已知。
输出9行,每行9个数字表示数独的解。

例如:
输入(即图中题目):
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700

程序应该输出:
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764

再例如,输入:
800000000
003600000
070090200
050007000
000045700
000100030
001000068
008500010
090000400

程序应该输出:
812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

DFS+回溯

二维数组填数,立马想到DFS。遍历到一个位置先看是不是0,如果是的话通过get_valid_nums拿到可以填的数,然后一个个试,不行就回溯。

递归逻辑倒是不难,主要是get_valid_nums里逻辑的判断,需要从1-9中过滤掉当前行已有的数和当前列已有的数以及当前3*3方格已有的数。

最后还有个check没写,但是想了想,get_valid_nums就已经check了,所以最后根本不用check,只要能填满就是答案。

Code

Python

def process_input():global mapsfor _ in range(9):maps.append(list(map(int, list(input()))))def check_map():""" check maps valid """return Truedef print_maps():global mapsfor i in maps:for j in i:print(j, end='')print()def check_index(x, y):return -1 < x < 9 and -1 < y < 9def get_valid_nums(x, y):set1 = set(maps[x])set2 = set()for i in range(9):set2.add(maps[i][y])set3 = set()for i in range(-(x % 3), 3 - x % 3):for j in range(-(y % 3), 3 - y % 3):set3.add(maps[x + i][y + j])return set(range(1, 10)) - set1 - set2 - set3def dfs(x, y):if x == 8 and y == 8 and check_map():print_maps()returnif not check_index(x, y):returnif maps[x][y] == 0:for num in get_valid_nums(x, y):maps[x][y] = numdfs(x + 1 if y == 8 else x, y + 1 if y < 8 else 0)maps[x][y] = 0else:dfs(x + 1 if y == 8 else x, y + 1 if y < 8 else 0)if __name__ == '__main__':maps = list()process_input()dfs(0, 0)

2014/School_C_C++_A/6/“数独”游戏相关推荐

  1. 2014/School_C_C++_A/5/勾股定理

    勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] 输入一 ...

  2. 2014/School_C_C++_A/3/x的x次幂

    如果x的x次幂结果为10,你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字. 请把x的值计算到小数后6位(四舍五入),并填写这个小数值. 注意:只填写一个小数,不要写任何多余的符号或说 ...

  3. 怎样设计解开数独游戏

    很早之前大概是2014年的时候,我用WPF就是C#啦,写了一个数独游戏,那时之所以有这个想法,主要还是因为更早之前玩数独游戏时基本没有把题目解出,有点小受伤,但本葛葛毕竟是程序员啊,我解不出,可以用程 ...

  4. 用 JS 做一个数独游戏(二)

    用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...

  5. Leetcode0037--Sudoku Solver 数独游戏

    [转载请注明]http://www.cnblogs.com/igoslly/p/8719622.html 来看一下题目: Write a program to solve a Sudoku puzzl ...

  6. python数独游戏源代码100行_python实现解数独程序代码

    偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...

  7. 注入游戏没有焦点_数独游戏 数学之美(三)

    一揭晓上期答案同学们,上周的数独题目你们做对了吗?让我们一起来看看正确答案吧! 二学生讲解数独游戏是一种非常益智的推理游戏,它可以提高你的逻辑思维能力.让我们来听一听这位同学的解题思路吧!三讲解新知这 ...

  8. python数独游戏源代码_使用Python编写数独游戏自动出题程序

    数独是一个很好玩的游戏,可以锻炼推理能力.下面的代码可以自动生成数独游戏题目. from random import shuffle, randrange def generate(): # 初始网格 ...

  9. 【dfs】数独游戏(ybtoj dfs-1-2)

    数独游戏 ybtoj dfs-1-3 题目大意 给出一个未完成的数独,让你完成它 输入样例 4.....8.5.3..........7......2.....6.....8.4......1.... ...

最新文章

  1. gbdt xgboost 贼难理解!
  2. 关于Java实现去除连续空格的延伸
  3. SIFT原理与源码分析
  4. js对象、构造函数、命名空间、方法、属性
  5. iOS c语言 基本运算符
  6. 数组指针 和 指针数组
  7. python中的变量的作用_Python中的变量作用域
  8. Python集合(set)类型的操作
  9. java封装对象数组_java解析JSON对象和封装对象的示例
  10. c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...
  11. JEECG列表嵌套查询列表子查询+号功能
  12. Mr.J-- jQuery学习笔记(二十七)--DOM操作方法(删除获取文本)
  13. 2018批量打印开关_从阿迪达斯到国产品牌,感受3D打印技术掀起的运动鞋中底革命...
  14. 博客园在我的博客添加点击小心心特效
  15. 《推荐系统实践》算法纯享(附代码链接)(二)—— 协同过滤篇
  16. pdfobject div中预览pdf
  17. 渗透测试常见弱口令汇总
  18. gitlab:切换远程仓库
  19. 纯电动汽车两档ATM变速箱simulink模型,模型实现了两档AMT换挡策略和换挡过程仿真
  20. 伤寒杂病论.辨太阳病脉证并治(上)

热门文章

  1. UVA10369 Arctic Network
  2. jsp学习(1)jsp请求过程和生命周期
  3. vertx.FileResolver文件解析
  4. 【Python】远离 Python 最差实践,避免挖坑
  5. servlet文件上传及下载
  6. oracle数据库的导入导出
  7. Cocos2dx 中 倒计时保留2位数写法
  8. RGB to HSB or RGB to HSL
  9. 【原】WPF 主界面布局中DockPanel的停靠与默认填充
  10. login窗口for mysql_CTF| SQL注入之login界面