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( ...
随机推荐
- mybatis 多个中间表查询映射
最近项目用到中间表,则遇到如何联查映射的问题,之前一直都是一个表头,多个明细或者一对一这样的关系,没遇到这样的问题,所以趁机找了下资料解决了这个问题. 表结构设计如下: 主表: CREATE TABL ...
- MVC-09安全
部分8:添加安全. MVC应用程序安全性 Models文件夹包含表示应用程序模型的类. Visual Web Developer自动创建AccountModels.cs文件,该文件包含用于应用程序认证 ...
- Java 环境
1. Java 环境1999年发布第二代java平台 简称 Java2 标准版 Standard Edition J2SE 企业版 Enterprise Edition J2EE 微型版 Micro ...
- "超时时间已到。在操作完成之前超时"的解决思路
错误往往是数据库操作超时引起 1.检查数据库访问连接字符串启用连接池,若是,适当增大超时时间 2.ADO sqlcommand相应调整超时时长 3.关键在于优化数据库操作,优化压缩执行时间
- Ubuntu 18.04 LTS版本 谷歌拼音输入法安装
为何安装? 自带IBUS框架对中文支持不稳定 采用对中文支持稳定的fcitx框架 如何安装? 步骤如下: 卸载自带IBUS框架 命令:sudo remove ibus 安装fcitx框架 ...
- Coldfusion Sql查询分组输出
<cfoutput query="myQry" group="date"> #date# <cfoutput> #detail# < ...
- 用Visual Studio 2015 编写 MASM 汇编程序(二)从头开发一个Win32汇编程序
一,建立一个VC的控制台类型的空工程: 1,从VS菜单中选择“文件”->“新建”->“项目”. 2,在新建项目中选择:“Visual c++”->"Win32"- ...
- SQL月度统计
select Convert ( VARCHAR(7),CreateTime,120) as Date ,sum(Money) as M FROM [LBAmmeterDB].[dbo].Am_Tas ...
- 【转】DSP动态内存分配函数的使用
DSP里的动态内存分配,其分配的内存区域在在堆(heap)中.同时DSP里动态分配内存的函数还有calloc以及reclloc.这些动态分配的内存放置在.system段的全局池或堆(heap)中.因此 ...
- Python_文件相关操作
1.open(filePath,type)方法:打开文件 filePath:文件路径 type:操作文件的方式(r:读取,w:覆盖写入,a:追加写入) 2.strip()方法:去除读取到的每行内容后的 ...