蒜头君今天突然开始还念童年了,想回忆回忆童年。他记得自己小时候,有一个很火的游戏叫做数独。便开始来了一局紧张而又刺激的高阶数独。蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出一个标准答案?

标准数独是由一个给与了提示数字的 9*9 网格组成,我们只需将其空格填上数字,使得每一行,每一列以及每一个3*3 宫都没有重复的数字出现。

输入格式

一个9×9的数独,数字之间用空格隔开。*表示需要填写的数字。

输出格式

输出一个9×9的数独,把出入中的*替换成需要填写的数字即可。

本题答案不唯一,符合要求的答案均正确

样例输入

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

样例输出

  1.  

这道题目类似八皇后问题,只不过八皇后是对每一行进行 1-8 的尝试,而这道题目是对每个空进行 1-9 的尝试。而且这道题目搜索到一种可行解就可以结束了。

标记方法为标记某行某个数字是否出现,标记某列某个数字是否出现,标记某个小方格某个数字是否出现。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. #include <string>
  5. #include <math.h>
  6. #include <algorithm>
  7. #include <vector>
  8. #include <stack>
  9. #include <queue>
  10. #include <set>
  11. #include <map>
  12. #include <sstream>
  13. const int INF=0x3f3f3f3f;
  14. typedef long long LL;
  15. const int mod=1e9+;
  16. const double PI = acos(-);
  17. const double eps =1e-;
  18. #define Bug cout<<"---------------------"<<endl
  19. const int maxn=1e5+;
  20. using namespace std;
  21.  
  22. char G[][];
  23. int cnt[]={,,,,,,,,,};//每个数字剩多少个
  24. int flag;//是否找到答案
  25.  
  26. void PT()//输出答案
  27. {
  28. for(int i=;i<;i++)
  29. {
  30. for(int j=;j<;j++)
  31. {
  32. if(j==) printf("%c",G[i][j]);
  33. else printf(" %c",G[i][j]);
  34. }
  35. printf("\n");
  36. }
  37. flag=;
  38. }
  39.  
  40. int judge(int x,int y,int num)//判断是否可以在G[x][y]处填入num
  41. {
  42. for(int i=;i<;i++)
  43. {
  44. if(G[x][i]==''+num||G[i][y]==''+num)
  45. return ;
  46. }
  47. for(int i=x/*;i<x/*+;i++)
  48. {
  49. for(int j=y/*;j<y/*+;j++)
  50. {
  51. if(G[i][j]==''+num)
  52. return ;
  53. }
  54. }
  55. return ;
  56. }
  57.  
  58. void DFS(int x,int y) //一层一层搜索
  59. {
  60. if(x==&&y==)
  61. {
  62. if(flag==) PT();
  63. return;
  64. }
  65. if(G[x][y]=='*')
  66. {
  67. for(int i=;i<=;i++)
  68. {
  69. if(judge(x,y,i)&&cnt[i])
  70. {
  71. G[x][y]=''+i; cnt[i]--;
  72. if(y==) DFS(x+,);
  73. else DFS(x,y+);
  74. if(flag) return ;
  75. G[x][y]='*'; cnt[i]++;
  76. }
  77. }
  78. }
  79. else
  80. {
  81. if(y==) DFS(x+,);
  82. else DFS(x,y+);
  83. }
  84. return ;
  85. }
  86.  
  87. int main()
  88. {
  89. #ifdef DEBUG
  90. freopen("sample.txt","r",stdin);
  91. #endif
  92. ios_base::sync_with_stdio(false);
  93. cin.tie(NULL);
  94.  
  95. for(int i=;i<;i++)
  96. {
  97. for(int j=;j<;j++)
  98. {
  99. scanf("%c",&G[i][j]);
  100. getchar();
  101. if(G[i][j]>=''&&G[i][j]<='')
  102. cnt[G[i][j]-'']--;
  103. }
  104. }
  105. DFS(,);
  106.  
  107. return ;
  108. }

-

计蒜客 数独(DFS)的更多相关文章

  1. 计蒜客 等边三角形 dfs

    题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...

  2. 计蒜客 踏青 dfs

    题目: https://www.jisuanke.com/course/2291/182234 思路: 紫书P163联通块问题. 1.遍历所有块,找到草地,判断合法性,合法其id值加一,最后加出来的i ...

  3. 计蒜客-A1139 dfs

    在一个 n \times mn×m 的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去. 现在为了引爆地图上 ...

  4. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  5. 计蒜客 方程的解数 dfs

    题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...

  6. 计蒜客 买书 dfs

    题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...

  7. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  8. [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】

    Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...

  9. 计蒜客 作弊揭发者(string的应用)

    鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...

随机推荐

  1. nginx location语法解释

    1.没有修饰符 表示:必须以指定模式开始,如:              默认模式 server { server_name baidu.com; location /abc { …… } } htt ...

  2. 112-PHP类变量之间的赋值标识为同一个对象(二)

    <?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...

  3. 吴裕雄--天生自然C++语言学习笔记:C++ Web 编程

    什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下: 公共网关接 ...

  4. Docker Ubuntu 例子

    版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...

  5. 记-OSPF学习

    LSA Type 1:Router LSA1.传播范围 :只能在本区域2.通告者 :每台路由器 (router-id作为标识)3.内容 :路由和拓扑信息show ip ospf database ro ...

  6. 微信小程序手绘地图实现之《Canvas》

    环境:微信SDK2.9+   + uniapp (可切换直接使用.map.js不限制环境) 正题: 先创建一个地图组件 <template> <view class="cu ...

  7. javascript实现抽奖程序

    昨天开年会的时候看到一个段子说唯品会年会抽奖,结果大奖都被写抽奖程序的部门得了,CTO现场review代码. 简单想了一下抽奖程序的实现,花了十几分钟写了一下,主要用到的知识有数组添加删除,以及ES5 ...

  8. LIS(最长上升子序列)的 DP 与 (贪心+二分) 两种解法

    正好训练赛来了一道最长递减序列问题,所以好好研究了一下最长递增序列问题. B - Testing the CATCHER Time Limit:1000MS     Memory Limit:3000 ...

  9. windows 2008R2 搭建web实现https访问

    一.安装服务. 二.IIS创建证书申请. 三.ca颁发证书 三.创建网站. 创建一个新建文件夹,并在文件夹中创建一个txt文件. 把新建文本文档.txt重命名为index.html 完成证书申请(导入 ...

  10. HTML笔记01

    HTML语法规范 <!DOCTYPE html>//HTML5规范 用于注释<!-- HTML文件主要包含头部分和体部分 <!-title> 指定网站标题 指定浏览器打开 ...