做了很久还是参考了别人的答案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. 基础!winForm客户端最常用的几个基本属性

    客户端应用程序 - 是需要安装在用户电脑上才可以使用的程序特点:不需要联网也可以打开使用部分功能但是现在的情况是许多功能依然需要互联网的支持 代码部分在用户电脑上执行 WinForm常用窗体属性: 布 ...

  2. 二维数组实现checkbox的分组多选

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script language="j ...

  3. Python语言精要---下

    函数: 可以返回多个值,其实函数是返回一个对象,就是元组,元组中的元素被拆分到各个结果变量中了 匿名函数: lambda函数,仅仅由单条语句组成,结果就是返回值 这种函数没有提供名称属性 闭包: cl ...

  4. 《Linux内核设计的艺术》学习笔记(三)Jcond指令

    参考书籍:<Assembly Language for x86 Processors (7th Edition)> ◆ JMPI指令: JMPI是x86实模式下的段间跳转指令: BOOTS ...

  5. JSP学习——原理

    JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.   JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比 ...

  6. linux学习笔记2-命令总结2

    权限管理命令  chmod 其他权限管理名  chgrp  chown  umask ========================================================= ...

  7. 学习笔记day6:position index结合

    z-index属性适用于定位元素(position 属性值为 relative 或 absolute 或 fixed的对象),用来确定定位元素在垂直于显示屏方向(称为Z轴)上的层叠顺序(stack o ...

  8. (二)shell中case语句、程序传参、while

    2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...

  9. (二)stm32之中断配置

    一.stm32的中断和异常 Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表 ...

  10. hostapd源代码分析(三):管理帧的收发和处理

    hostapd源代码分析(三):管理帧的收发和处理 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004379 这篇文章我来讲解一下h ...