题目链接: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)的更多相关文章

  1. Red and Black(简单dfs)

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  2. POJ 1979 Red and Black (简单dfs)

    题目: 简单dfs,没什么好说的 代码: #include <iostream> using namespace std; typedef long long ll; #define IN ...

  3. POJ1573(Robot Motion)--简单模拟+简单dfs

    题目在这里 题意 : 问你按照图中所给的提示走,多少步能走出来??? 其实只要根据这个提示走下去就行了.模拟每一步就OK,因为下一步的操作和上一步一样,所以简单dfs.如果出现loop状态,只要记忆每 ...

  4. POJ 2676 Sudoku (DFS)

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11694   Accepted: 5812   Special ...

  5. poj2676 Sudoku(DFS)

    做了很久还是参考了别人的答案orz,其实也不难啊.我要开始学一下怎么写搜索了... 题目链接:poj2676 Sudoku 题解:暴力搜索,DFS每个空白格子所放数字. #include<cst ...

  6. POJ1979 Red and Black (简单DFS)

    POJ1979 Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...

  7. POJ 2676 Sudoku (数独 DFS)

      Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14368   Accepted: 7102   Special Judg ...

  8. CF760 C. Pavel and barbecue 简单DFS

    LINK 题意:给出n个数,\(a_i\)代表下一步会移动到第\(a_i\)个位置,并继续进行操作,\(b_i\)1代表进行一次翻面操作,要求不管以哪个位置上开始,最后都能满足 1.到达过所有位置 2 ...

  9. uva 784 Maze Exploration(简单dfs)

    这道题看上去非常麻烦,什么迷宫啊.门之类的,事实上挺简单的,就是让把与 * 连通的都置为 # 包含 * , 直接dfs就能够了,只是我wa了好多次...最后居然是多读了一个换行.忘了加getchar( ...

随机推荐

  1. mybatis 多个中间表查询映射

    最近项目用到中间表,则遇到如何联查映射的问题,之前一直都是一个表头,多个明细或者一对一这样的关系,没遇到这样的问题,所以趁机找了下资料解决了这个问题. 表结构设计如下: 主表: CREATE TABL ...

  2. MVC-09安全

    部分8:添加安全. MVC应用程序安全性 Models文件夹包含表示应用程序模型的类. Visual Web Developer自动创建AccountModels.cs文件,该文件包含用于应用程序认证 ...

  3. Java 环境

    1. Java 环境1999年发布第二代java平台 简称 Java2 标准版 Standard Edition J2SE 企业版 Enterprise Edition J2EE 微型版 Micro ...

  4. "超时时间已到。在操作完成之前超时"的解决思路

    错误往往是数据库操作超时引起 1.检查数据库访问连接字符串启用连接池,若是,适当增大超时时间 2.ADO sqlcommand相应调整超时时长 3.关键在于优化数据库操作,优化压缩执行时间

  5. Ubuntu 18.04 LTS版本 谷歌拼音输入法安装

    为何安装? 自带IBUS框架对中文支持不稳定 采用对中文支持稳定的fcitx框架 如何安装? 步骤如下: 卸载自带IBUS框架    命令:sudo remove ibus 安装fcitx框架    ...

  6. Coldfusion Sql查询分组输出

    <cfoutput query="myQry" group="date"> #date# <cfoutput> #detail# < ...

  7. 用Visual Studio 2015 编写 MASM 汇编程序(二)从头开发一个Win32汇编程序

    一,建立一个VC的控制台类型的空工程: 1,从VS菜单中选择“文件”->“新建”->“项目”. 2,在新建项目中选择:“Visual c++”->"Win32"- ...

  8. SQL月度统计

    select Convert ( VARCHAR(7),CreateTime,120) as Date ,sum(Money) as M FROM [LBAmmeterDB].[dbo].Am_Tas ...

  9. 【转】DSP动态内存分配函数的使用

    DSP里的动态内存分配,其分配的内存区域在在堆(heap)中.同时DSP里动态分配内存的函数还有calloc以及reclloc.这些动态分配的内存放置在.system段的全局池或堆(heap)中.因此 ...

  10. Python_文件相关操作

    1.open(filePath,type)方法:打开文件 filePath:文件路径 type:操作文件的方式(r:读取,w:覆盖写入,a:追加写入) 2.strip()方法:去除读取到的每行内容后的 ...