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

题目链接:poj2676 Sudoku

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

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<vector>
  6. using namespace std;
  7. bool row_f[][];//row_f[i][j]=1表示第i行已经放了数字j
  8. bool col_f[][];
  9. bool block_f[][];
  10. int g[][];
  11. struct blank{
  12. int i, j;
  13. blank(int i, int j):i(i),j(j) {}
  14. };
  15. vector<blank> bk;
  16. int get_blockid(int i, int j){
  17. i /= ;
  18. j /= ;
  19. return i * + j;
  20. }
  21. bool ok(int i, int j, int x){
  22. return !row_f[i][x] && !col_f[j][x] && !block_f[get_blockid(i, j)][x];
  23. }
  24. void setnum(int i, int j, int x, int f){
  25. row_f[i][x] = f;
  26. col_f[j][x] = f;
  27. block_f[get_blockid(i, j)][x] = f;
  28. }
  29. bool dfs(int n){//处理前n个空白格
  30. if(n < ) return true;
  31. int r = bk[n].i;
  32. int c = bk[n].j;
  33. for(int x = ; x <= ; ++x){
  34. if(ok(r, c, x)){
  35. setnum(r, c, x, );
  36. g[r][c] = x;
  37. if(dfs(n - )) return true;
  38. setnum(r , c, x, );
  39. }
  40. }
  41. return false;
  42. }
  43. int main(){
  44. int t, i, j;
  45. char c;
  46. scanf("%d", &t);
  47. while(t--){
  48. bk.clear();
  49. memset(row_f, , sizeof(row_f));
  50. memset(col_f, , sizeof(col_f));
  51. memset(block_f, , sizeof(block_f));
  52. for(i = ; i < ; ++i){
  53. for(j = ;j < ; ++j){
  54. cin >> c;
  55. g[i][j] = c - '';
  56. if(!g[i][j])
  57. bk.push_back(blank(i, j));
  58. else
  59. setnum(i, j, g[i][j], );
  60. }
  61. }
  62. if(dfs(bk.size()-)){
  63. for(i = ; i < ; ++i){
  64. for(j = ; j < ; ++j)
  65. printf("%c", g[i][j] + '');
  66. printf("\n");
  67. }
  68. }
  69. }
  70. return ;
  71. }

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. Using SYSTEM.MOUSE_ITEM In Oracle Forms

    If the mouse is in an item, SYSTEM.MOUSE_ITEM represents the name of that item as a CHAR value.For e ...

  2. request 获取各种路径

    从request获取各种路径总结 request.getRealPath("url"); // 虚拟目录映射为实际目录 request.getRealPath("./&q ...

  3. 用iconv指令解决utf8和gb18030编码间转换

    Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致.Linux下使用的编码是utf8,而Windows使用的是gb18030.  解决方案:  在终端中,进入到 ...

  4. Python入门-多行语句

    1. Python语句中一般以新行作为为语句的结束符. 但是我们可以使用斜杠( \)将一行的语句分为多行显示. 2. 语句中包含[], {} 或 () 括号就不需要使用多行连接符. days = [' ...

  5. So easy Webservice 6.使用EndPoint发布webservice服务

    创建第一个Web服务: @WebService // 添加了此注解,代表是一个WebService public class HelloWorld { // 非 static final privat ...

  6. Codeforces Round #380 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 2) D. Sea Battle 模拟

    D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  7. new的深一步

    new的深一步 new运算符 用于创建对象和条用构造函数 new修饰符 用于隐藏基类中被继承的成员 new约束 用于在泛型声明中约束可能用作类型参数的参数类型 new运算符 用于创建对象和调用构造函数 ...

  8. sgu-508 Black-white balls 概率-贝叶斯公式

    题意:有n个球,其中有0.1.2...n个黑球的概率是相等的,现在从中取出L个球,p个黑球q个白球.现在问猜一个黑球的区间,使得落在这个区间的概率大于给定的一个数值. 详见代码: #include & ...

  9. web设计经验<四>设计师必备的20条设计黄金法则

    编者按:以下内容摘自<美国视觉设计学院之完形设计>,新手可以多看这些法则,并运用到你的设计过程中,防止自己做出甲方式审美的作品. 一.必须有一个概念 设计从创意开始.这可能是非常不确定的— ...

  10. Java编程思想学习笔记_2(继承和多态)

    静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...