POJ 2676/2918 数独(dfs)
思路:记录每行每列每一个宫已经出现的数字就可以。数据比較弱
另外POJ 3074 3076 必须用剪枝策略。但实现较麻烦,还是以后学了DLX再来做吧
//Accepted 160K 0MS
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N =15;
char sudo[N][N];
bool visr[N][N],visc[N][N],visg[N][N];
int pos[N][N];
bool flag;
void print()
{
for(int i=1;i<=9;i++)
printf("%s\n",sudo[i]+1);
}
void dfs(int x,int y)
{
if(y==10)
{
dfs(x+1,1);
return ;
}
if(x==10)
{
print();
flag=1;
return ;
}
if(sudo[x][y]!='0')
{
dfs(x,y+1);
return ;
}
for(int i=1;i<=9&&!flag;i++)
{
if(visr[x][i]==0&&visc[y][i]==0&&visg[pos[x][y]][i]==0)
{
sudo[x][y]='0'+i;
visc[y][i]=visr[x][i]=visg[pos[x][y]][i]=1;
dfs(x,y+1);
sudo[x][y]='0';
visc[y][i]=visr[x][i]=visg[pos[x][y]][i]=0;
}
}
}
void ini()
{
flag = false ;
memset(visr,0,sizeof(visr));
memset(visc,0,sizeof(visc));
memset(visg,0,sizeof(visg));
}
int main()
{
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
pos[i][j]=((j-1)/3+1)+3*((i-1)/3); int T;
scanf("%d",&T);
for(int cas=1;cas<=T;cas++)
{
printf("Scenario #%d:\n",cas);
ini();
for(int i=1;i<=9;i++)
scanf("%s",sudo[i]+1);
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
{
int val=sudo[i][j]-'0';
visr[i][val]=true;
visc[j][val]=true;
visg[pos[i][j]][val]=true;
}
dfs(1,1);
puts("");
}
return 0;
}
POJ 2676/2918 数独(dfs)的更多相关文章
- POJ 2676 Sudoku (数独 DFS)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14368 Accepted: 7102 Special Judg ...
- POJ - 2676 Sudoku 数独游戏 dfs神奇的反搜
Sudoku Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smalle ...
- POJ 2676 Sudoku (DFS)
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11694 Accepted: 5812 Special ...
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- 随手练——POJ - 2676 数独 (回溯法)
POJ - 2676 : http://poj.org/problem?id=2676: 解题思想 (大力出奇迹): 1. 依次在空格里面填上“1~9”,并检查这个数字是否合法(其所在的行.列,以及3 ...
- 深搜+回溯 POJ 2676 Sudoku
POJ 2676 Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17627 Accepted: 8538 ...
- POJ 1321 棋盘问题 --- DFS
POJ 1321 题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子. (注意 .不可放 #可放) 解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标 ...
- POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)
POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...
- POJ 2676 - Sudoku - [蓝桥杯 数独][DFS]
题目链接:http://poj.org/problem?id=2676 Time Limit: 2000MS Memory Limit: 65536K Description Sudoku is a ...
随机推荐
- ASP.NET - 出错页
配置Web.config,配置customError区域. <system.web> <customErrors mode ="RemoteOnly" defau ...
- Android学习之一:Cygwin简介
为了能够一窥Android底层的东东,还是要搭建编译Android的环境.虽有Ubuntu和Suse系统,无奈总感觉在不同的系统下切来切去很是不便.在Windows工作学习,要编译Android,就不 ...
- VxWorks6.6 pcPentium BSP 使用说明(二):创建启动盘
本篇介绍从Solaris.Linux.Windows或VxWorks创建VxWorks启动盘的方法. 从Solaris或Linux创建启动盘 使用Solaris或Linux自带的工具/usr/bin/ ...
- PHP开发-上传文件
<?php /****************************************************************************** 参数说明: $max_ ...
- 几本不错的CPU设计以及VLSI的书籍
1. Microprocessor Design Principales and Practrices with VHDL 特点:电路与VHDL一一对应,比较清楚,而且还用MAX+plus进行仿真 ...
- 输出特殊符号,可以用单引号'引文':echo 'Hello World !'
输出特殊符号,可以用单引号'引文':echo 'Hello World !'
- Matlab的parfor并行编程
Matlab的parfor并行编程 通常消耗最多计算资源的程序往往是循环. 把循环并行化.或者优化循环体中的代码是最经常使用的加快程序执行速度的思路. Matlab提供了parforkeyword,能 ...
- 让AllocateHwnd接受一般函数地址作参数(105篇博客)
http://www.xuebuyuan.com/1889769.html Classes单元的AllocateHWnd函数是需要传入一个处理消息的类的方法的作为参数的,原型: function Al ...
- 向大家推荐个android的游戏引擎——cocos2d-x
最近发现单单用android自带的功能函数来编写游戏,往往有很大的局限性,即耗时长,调试繁琐,没有一定的框架.所以博主发现了游戏引擎这个好东西,游戏引擎所拥有的架构和功能函数,使得游戏的编写更加得心应 ...
- HDU 4296 Buildings (YY)
题意: 给定N个物体,每个物体有两个参数w,s. w代表它自身的重量: s代表它的强度.现在要把这些物体叠在一起,会产生一个PDV值. PDV解释:(Σwj)-si, where (Σwj) st ...