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 - Eval数据绑定
<!--新闻分类--> <div id ="category" class ="Frm"> <h4>新闻分类</h4& ...
- Qt之界面出现、消失动画效果
在学习Qt的这2.3个月里,对Qt越发感兴趣,从刚开始的盲目.无所适从到现在的学习.研究.熟练.掌握的过程中,我学到了很多东西,也学会了如何通过自学让自己更加成熟.强大起来,如何更有效地提高自己学习. ...
- mysql 密码过期问题 password_expired
mysql> select user,host,password_expired from mysql.user; +-----------------+----------------+--- ...
- 开发环境FAQ
问: Win7下VS2008无法识别WinCE5.0SDK 答:拷贝WinXP环境(安装过VS2008 + WinCE5.0SDK)下C:/Program Files/Microsoft Visual ...
- 内省(一)之Introspector、BeanInfo、PropertyDescriptor
内省(Introspector)是专门用来操作JavaBean属性的.不是所有的字段(Field)都能被称之为属性,只有某些字段具有getXXX或setXXX方法的才能称之为属性,当然要称为是一个Be ...
- 【ASP.NET Web API教程】2.1 创建支持CRUD操作的Web API
原文 [ASP.NET Web API教程]2.1 创建支持CRUD操作的Web API 2.1 Creating a Web API that Supports CRUD Operations2.1 ...
- 源代码编译lamp环境
没有办法用 rpm查询一个源代码包是否安装 因为 并不是用rpm安装的 可以先吧 selinux 给禁用掉 iptables -F 把防火墙规则全部删除 首先确保 gcc gcc-c++ ma ...
- Swift - 导航条(UINavigationBar)的使用
与导航控制器(UINavigationController)同时实现导航条和页面切换功能不同. 导航条(UINavgationBar)可以单独使用,添加至任何的UIView中.UINavigation ...
- 积累的VC编程小技巧之工具条和状态条
1.工具条和状态条中控件的添加: 方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上 ...
- [JS练习] 瀑布流照片墙
记录JS实现瀑布流照片墙效果 首先是前端页面 <!DOCTYPE html> <html lang="en"> <head> <meta ...