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( ...
随机推荐
- shell 学习笔记9-while/until循环语句
一.while循环语句 1.循环语句 循环愈久就是重复执行一条指令或一组执行,知道条件不在满足时停止,shell循环语句包括,while.until.for.select语句 2.while循环 主要 ...
- jdbcUrl is required with driverClassName
https://blog.csdn.net/newbie_907486852/article/details/81391525 springboot2.0配置多数据源: spring.datasour ...
- Oracle——无法在查询中执行 DML 操作
今天在调用Oracle Function遇到一个异常
- jquery easyui datagrid的一些用法
获取选中的多选数据 var rows = $('#Id').datagri('getSelections'); 选中单行的数据 var row = $(#Id).datagrid('getSelect ...
- c# 异步( Async ) 不是多线程
c# 异步( Async ) 不是多线程 误解 async 在调试 xxxxAsync() 方法的时候,常常会看到调试器界面中会多出一些线程,直觉上误认为 Async 冠名的函数是多线程. 对于 ...
- win10 idea启动Tomcat后控制台中文乱码
idea 配置文件新增如下配置 -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8
- isolate两三事
1.1. 第一步:创建并握手 如前所述,Isolate 不共享任何内存并通过消息进行交互,因此,我们需要找到一种方法在「调用者」与新的 isolate 之间建立通信. 每个 Isolate 都暴露了一 ...
- centOS学习part6:安装oracle 11g
0 大家好.上一章(http://www.cnblogs.com/souvenir/p/3881484.html)我们对oracle在centOS下的安装进行了各项环境准备,本章我们将正式进行oral ...
- Nginx 操作响应头信息的实现
前置条件:需要编译 ngx_http_headers_module 模块,才支持 header 头信息操作 add_header 意思为将自定义的头信息的添加到响应头,指令为 add_header n ...
- 小顶堆---非递归C语言来一发
#include <stdio.h> #include <stdlib.h> #define HEAP_SIZE 100 #define HEAP_FULL_VALUE -10 ...