Sudoku(简单DFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5547
数据比较少,直接暴力DFS,检验成立情况即可
AC代码:但是不知道为什么用scanf,printf输入输出就WA了
/* */
# include <iostream>
# include <stdio.h>
# include <string.h>
# include <cstdlib>
# include <cmath>
# include <climits>
# include <deque>
# include <queue>
# include <stack>
# include <vector>
# include <map>
# include <set>
# include <ctime>
# include <functional>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=5e4+;
const ll mod=1e9+;
char ma[][];
int vis[];
int p[][];
int tx[];
int ty[];
int flag, tot; int check()
{
for(int i=; i<; i++ )///检查每一行
{
vis[]=vis[]=vis[]=vis[]=;
for(int j=; j<; j++ )
{
if( p[i][j]== )
continue;
if( vis[p[i][j]] )///填的数重复了不成立
return ;
vis[p[i][j]] = ;
}
} for(int j=; j<; j++ )///检查每一列
{
vis[]=vis[]=vis[]=vis[]=;
for(int i=; i<; i++ )
{
if( p[i][j]== )
continue;
if( vis[p[i][j]] )
return ;
vis[p[i][j]] = ;
}
} vis[] = vis[] = vis[] = vis[] = ;
for(int i=; i<; i++ )///检查左上角的1/4方块
{
for(int j=; j<; j++ )
{
if( p[i][j]== )
continue;
if( vis[p[i][j]] )
return ;
vis[p[i][j]] = ;
}
} vis[]=vis[]=vis[]=vis[]=;
for(int i=; i<; i++ )///检查右上角的1/4块
{
for(int j=; j<; j++ )
{
if( p[i][j]== )
continue;
if( vis[p[i][j]] )
return ;
vis[p[i][j]] = ;
}
} vis[] = vis[] = vis[] = vis[]=;
for(int i=; i<; i++ )///检查左下角1/4块
{
for(int j=; j<; j++ )
{
if( p[i][j]== )
continue;
if( vis[p[i][j]] )
return ;
vis[p[i][j]] = ;
}
} vis[] = vis[] = vis[] = vis[] = ;
for(int i=; i<; i++ )///检查右下角1/4块
{
for(int j=; j<; j++ )
{
if( p[i][j]== )
continue;
if( vis[p[i][j]] )
return ;
vis[p[i][j]] = ;
}
}
return ;
} void dfs(int x)
{
if( flag )
return ;
if( x==tot )
{
for(int i=; i<; i++ )
{
for(int j=; j<; j++ )
{
cout<<p[i][j];
//printf("%d", p[i][j]);
}
cout<<endl;
//printf("\n");
}
flag=;
return ;
} for(int i=; i<=; i++ )
{
p[tx[x]][ty[x]]=i;
if( check())
{
dfs(x+);
}
p[tx[x]][ty[x]] = ;
}
} int main()
{
int t;
scanf("%d", &t);
int k=;
//getchar();
while( t-- )
{
for(int i=; i<; i++ )
{
for(int j=; j<; j++ )
{
cin>>ma[i][j];
//scanf("%c", &ma[i][j]);
}
//getchar();
} for(int i=; i<; i++ )
{
for(int j=; j<; j++ )
{
if( ma[i][j]=='*' )
{
p[i][j] = ;
}
else
p[i][j] = ma[i][j] - '';
}
} flag=;
tot = ;
for(int i=; i<; i++ )
{
for(int j=; j<; j++ )
{
if( !p[i][j] )
{
/*依次记录空节点的坐标*/
tx[tot] = i;
ty[tot] = j;
tot++;
}
}
}
printf("Case #%d:\n", k++);
dfs();
}
return ;
}
Sudoku(简单DFS)的更多相关文章
- Red and Black(简单dfs)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- POJ 1979 Red and Black (简单dfs)
题目: 简单dfs,没什么好说的 代码: #include <iostream> using namespace std; typedef long long ll; #define IN ...
- POJ1573(Robot Motion)--简单模拟+简单dfs
题目在这里 题意 : 问你按照图中所给的提示走,多少步能走出来??? 其实只要根据这个提示走下去就行了.模拟每一步就OK,因为下一步的操作和上一步一样,所以简单dfs.如果出现loop状态,只要记忆每 ...
- POJ 2676 Sudoku (DFS)
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11694 Accepted: 5812 Special ...
- poj2676 Sudoku(DFS)
做了很久还是参考了别人的答案orz,其实也不难啊.我要开始学一下怎么写搜索了... 题目链接:poj2676 Sudoku 题解:暴力搜索,DFS每个空白格子所放数字. #include<cst ...
- POJ1979 Red and Black (简单DFS)
POJ1979 Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...
- POJ 2676 Sudoku (数独 DFS)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14368 Accepted: 7102 Special Judg ...
- CF760 C. Pavel and barbecue 简单DFS
LINK 题意:给出n个数,\(a_i\)代表下一步会移动到第\(a_i\)个位置,并继续进行操作,\(b_i\)1代表进行一次翻面操作,要求不管以哪个位置上开始,最后都能满足 1.到达过所有位置 2 ...
- uva 784 Maze Exploration(简单dfs)
这道题看上去非常麻烦,什么迷宫啊.门之类的,事实上挺简单的,就是让把与 * 连通的都置为 # 包含 * , 直接dfs就能够了,只是我wa了好多次...最后居然是多读了一个换行.忘了加getchar( ...
随机推荐
- ITIL《信息技术基础架构库》
一 概述 1. ITIL 自上世纪70年代开始,个人计算机以及计算机网络开始在欧美发达国家普及.随着时间的推移,信息系统的规模越来越大,人们对信息系统的依赖也越来越强.特别是到了80年代,互联网开始普 ...
- 第三方dll签名
1.打开vs Tools下的工具命令 2.生成随机密钥对C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC>sn -k NonSignL ...
- JavaScript的变量和常量
1.什么是常量? 常量表示一些固定不变的数据 现实生活中人的性别其实就可以看做是常量, 生下来是男孩一辈子都是男孩, 生下来是女孩一辈子都是女孩 2.JavaScript中常量的分类 2.1整型常量 ...
- iOS自动签名网站
node.js作为服务端,调用shell脚本进行iOS包重签名. 需要安装:nodejs ,forever 安装环境: 安装nodejs 安装forever: npm install forever ...
- sourceTree 3.X免注册[学习]
一. 在路径C:\****\AppData\Local\Atlassian\SourceTree下创建accounts.json文件 [ { "$id": "1" ...
- iOS原生与H5交互
一.WKWebView WKWebView 初始化时,有一个参数叫configuration,它是WKWebViewConfiguration类型的参数,而WKWebViewConfiguration ...
- python之文件的相关操作
一..文件操作的函数 open("文件名(路径)" ,mode = "模式" , encoding="字符集") 注:文件路径: (1)绝对 ...
- python在运行时终止执行 sys.exit
使用sys.exit 或者exit,quit均可以退出执行 # 程序执行中,需要时停止执行 import sys if __name__ == '__main__': for ii in range( ...
- css详解4
1.固定定位 固定定位,页面内容多,页面滚动起来,才能看到固定定位效果. 比如下面这个,随之滚动条滚动它一直在右边.比如固定导航栏,小广告,回到顶部,应用在这些地方.一直固定位置不变的. 首先让页面能 ...
- vs中找到接口和抽象类的具体实现类
如何找到接口和抽象类的具体实现类 1,可以使用:ctrl+k clrl+t打开调用层次结构窗口: 2,移动到实现节点: 3,然后可以转到具体实现: 第二种安装插件 ReSharper 第三种方法: 在 ...