计蒜客 数独(DFS)
蒜头君今天突然开始还念童年了,想回忆回忆童年。他记得自己小时候,有一个很火的游戏叫做数独。便开始来了一局紧张而又刺激的高阶数独。蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出一个标准答案?
标准数独是由一个给与了提示数字的 9*9 网格组成,我们只需将其空格填上数字,使得每一行,每一列以及每一个3*3 宫都没有重复的数字出现。
输入格式
一个9×9的数独,数字之间用空格隔开。*表示需要填写的数字。
输出格式
输出一个9×9的数独,把出入中的*替换成需要填写的数字即可。
本题答案不唯一,符合要求的答案均正确
样例输入
* * * * * * *
* * * * * *
* * * * * * *
* * * * *
* * * * * * *
* * * * *
* * * * * * *
* * * * * *
* * * * * * *
样例输出
这道题目类似八皇后问题,只不过八皇后是对每一行进行 1-8 的尝试,而这道题目是对每个空进行 1-9 的尝试。而且这道题目搜索到一种可行解就可以结束了。
标记方法为标记某行某个数字是否出现,标记某列某个数字是否出现,标记某个小方格某个数字是否出现。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
const double PI = acos(-);
const double eps =1e-;
#define Bug cout<<"---------------------"<<endl
const int maxn=1e5+;
using namespace std; char G[][];
int cnt[]={,,,,,,,,,};//每个数字剩多少个
int flag;//是否找到答案 void PT()//输出答案
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
if(j==) printf("%c",G[i][j]);
else printf(" %c",G[i][j]);
}
printf("\n");
}
flag=;
} int judge(int x,int y,int num)//判断是否可以在G[x][y]处填入num
{
for(int i=;i<;i++)
{
if(G[x][i]==''+num||G[i][y]==''+num)
return ;
}
for(int i=x/*;i<x/*+;i++)
{
for(int j=y/*;j<y/*+;j++)
{
if(G[i][j]==''+num)
return ;
}
}
return ;
} void DFS(int x,int y) //一层一层搜索
{
if(x==&&y==)
{
if(flag==) PT();
return;
}
if(G[x][y]=='*')
{
for(int i=;i<=;i++)
{
if(judge(x,y,i)&&cnt[i])
{
G[x][y]=''+i; cnt[i]--;
if(y==) DFS(x+,);
else DFS(x,y+);
if(flag) return ;
G[x][y]='*'; cnt[i]++;
}
}
}
else
{
if(y==) DFS(x+,);
else DFS(x,y+);
}
return ;
} int main()
{
#ifdef DEBUG
freopen("sample.txt","r",stdin);
#endif
ios_base::sync_with_stdio(false);
cin.tie(NULL); for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
scanf("%c",&G[i][j]);
getchar();
if(G[i][j]>=''&&G[i][j]<='')
cnt[G[i][j]-'']--;
}
}
DFS(,); return ;
}
-
计蒜客 数独(DFS)的更多相关文章
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 踏青 dfs
题目: https://www.jisuanke.com/course/2291/182234 思路: 紫书P163联通块问题. 1.遍历所有块,找到草地,判断合法性,合法其id值加一,最后加出来的i ...
- 计蒜客-A1139 dfs
在一个 n \times mn×m 的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去. 现在为了引爆地图上 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
- 计蒜客 买书 dfs
题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
- [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】
Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
随机推荐
- sqlserver插入图片数据
-- 插入 insert into [CHOLPOR].[dbo].[t_image](id, name) select '1', BulkColumn from openrowset(bulk N' ...
- 130-PHP子类通过类函数访问父类protected修饰的类成员
<?php class father{ //定义father类 //定义protected修饰的成员属性和方法 protected $money=1000000; protected funct ...
- Spring Cloud Alibaba:Sentinel实现熔断与限流
一.什么是Sentinel Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩效应”,为微服务系统提供了稳 ...
- python3 --- unittest单元测试框架
1.unittest结构 1.单元测试的框架 unittest(python自带,无需额外安装)+接口2.文件,命名时,千万不要写成unittest这样的模块名,会报错的3.功能测试 1)写用例 Te ...
- js 琐碎
1.setTimeout() .setInterval() setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式.(即n毫秒后执行一次) setTimeout(code,n) set ...
- POJ 1423:Big Number 求N的阶乘的长度 斯特林公式
Big Number Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27027 Accepted: 8626 Descr ...
- 量化交易回测系统---RQalpha、qstrade学习笔记
一.RQalpha github 地址 https://github.com/ricequant/rqalpha 1.运行test.py文件,显示 No module named 'logbook. ...
- PHP中Cookie与Session的异同以及使用
Cookie与Session的异同: 一.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Mana ...
- C语言-浮点类型
C语言-浮点类型 浮点类型 在0的两侧有一小块区域,这个区域非常接近0,但是不等于0,是float(表达范围数量级10^-38^)或者double(达范围数量级10^-308^)无法表达的,而0是可以 ...
- Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
计算年.月.日需要安装组件包 pip install python-dateutil 当前日期时间 import datetime print datetime.datetime.now() # 20 ...