做了很久还是参考了别人的答案orz,其实也不难啊。我要开始学一下怎么写搜索了。。。

题目链接:poj2676 Sudoku

题解:暴力搜索,DFS每个空白格子所放数字。

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
bool row_f[][];//row_f[i][j]=1表示第i行已经放了数字j
bool col_f[][];
bool block_f[][];
int g[][];
struct blank{
int i, j;
blank(int i, int j):i(i),j(j) {}
};
vector<blank> bk;
int get_blockid(int i, int j){
i /= ;
j /= ;
return i * + j;
}
bool ok(int i, int j, int x){
return !row_f[i][x] && !col_f[j][x] && !block_f[get_blockid(i, j)][x];
}
void setnum(int i, int j, int x, int f){
row_f[i][x] = f;
col_f[j][x] = f;
block_f[get_blockid(i, j)][x] = f;
}
bool dfs(int n){//处理前n个空白格
if(n < ) return true;
int r = bk[n].i;
int c = bk[n].j;
for(int x = ; x <= ; ++x){
if(ok(r, c, x)){
setnum(r, c, x, );
g[r][c] = x;
if(dfs(n - )) return true;
setnum(r , c, x, );
}
}
return false;
}
int main(){
int t, i, j;
char c;
scanf("%d", &t);
while(t--){
bk.clear();
memset(row_f, , sizeof(row_f));
memset(col_f, , sizeof(col_f));
memset(block_f, , sizeof(block_f));
for(i = ; i < ; ++i){
for(j = ;j < ; ++j){
cin >> c;
g[i][j] = c - '';
if(!g[i][j])
bk.push_back(blank(i, j));
else
setnum(i, j, g[i][j], );
}
}
if(dfs(bk.size()-)){
for(i = ; i < ; ++i){
for(j = ; j < ; ++j)
printf("%c", g[i][j] + '');
printf("\n");
}
}
}
return ;
}

poj2676 Sudoku(DFS)的更多相关文章

  1. POJ2676 – Sudoku(数独)—DFS

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24081   Accepted: 11242   Specia ...

  2. POJ 2676 Sudoku (DFS)

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

  3. poj2676 Sudoku(搜索)

    题目链接:http://poj.org/problem?id=2676 题意:9*9的方格,0代表没数字,其他代表数字,请在格子中填入1~9的数字,使得在每行,每列和每个3*3的方块中,1~9的数字每 ...

  4. LeetCode Subsets II (DFS)

    题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...

  5. LeetCode Subsets (DFS)

    题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. class Sol ...

  6. HDU 2553 N皇后问题(dfs)

    N皇后问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 在 ...

  7. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  8. 【算法导论】图的深度优先搜索遍历(DFS)

    关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...

  9. 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现

    1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...

随机推荐

  1. @SuppressWarnings—注解用法详解

    一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWar ...

  2. Xcode:Foundation框架找不到,或者是自动提示出现问题

    问题描述:Foundation框架找不到,或者是自动提示出现问题 之前的操作:手贱,不少心把编译器里面的源码改了 处理办法:清理缓存 缓存位置:点击桌面后,选择系统菜单栏:前往—电脑—硬盘—用户—ap ...

  3. NPN&PNP

    一.晶体管基础知识 晶体管分2种:NPN.PNP 晶体管通常封装为TO-92,下面是元件实物图 和 元件符合: NPN: 当电压和电流被加到基极上时,NPN晶体管: 其工作原理: 就像水龙头—给控制开 ...

  4. JSON学习总结

    最近几天使用json的需求比较急迫,所以学习了一下json.此文仅当笔记,以防忘却. 此文主要分为js和java总结: 先介绍json格式: JSON 数据的书写格式是:名称/值对. ***:可以更容 ...

  5. PPPOE协议

    PPPOE协议 PPPOE的全称为PPP Over Ethernet,用于实现PPP在以太网上的传输.它要求通信双方是点到点的关系,不适于广播型的以太网和一些多点访问型网络. 一.PPPOE的作用 将 ...

  6. FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT用法

    Activity的两种启动模式: FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT 1. 如果已经启动了四个Activity:A,B,C和D ...

  7. Tomcat:IOException while loading persisted sessions: java.io.EOFException解决手记

    原文:http://blog.csdn.net/lifuxiangcaohui/article/details/37659905 一直用tomcat一段时间都正常无事,最近一次启动tomcat就发生以 ...

  8. C++常量(C++数值常量、字符串常量、符号常量)

    http://see.xidian.edu.cn/cpp/biancheng/view/104.html 字符串常量 用双撇号括起来的部分就是字符串常量,如"abc"," ...

  9. python字符串替换的2种有效方法

    python 字符串替换可以用2种方法实现:1是用字符串本身的方法.2用正则来替换字符串 下面用个例子来实验下:a = 'hello word'我把a字符串里的word替换为python1用字符串本身 ...

  10. s3c2440 J-flash 烧写 NOR flash

    视屏教程里是在NOR Flash 烧写了一个supervivi然后通过superViVi配合DNW下载Uboot程序到landflash第零块,由于我电脑室64位win7,官方提供的USB下载驱动不能 ...