• poj--2676--回溯


    很久很久前 就做过数独了 当时一直没做出来了

    这次 也磕磕绊绊 终于过了.... 数独题 真的很好 对于回溯的理解 很有帮助

    一下子 觉得 全垒打的节奏...

            touch  me

      1 #include <iostream>
      2 #include <cstring>
      3 using namespace std;
      4 
      5 const int size = 15;
      6 bool flag;
      7 int sudu[size][size];
      8 bool rowHas[size][size];
      9 bool colHas[size][size];
     10 
     11 void dfs( int u )
     12 {
     13     bool end = false;
     14     int x = u/9;
     15     int y = u%9;
     16     if( u==81 )
     17     {
     18         flag = true;
     19         return;
     20     }
     21     if( sudu[x][y] )
     22     {
     23         dfs( u+1 );    
     24     }    
     25     else
     26     {
     27         for( int i = 1 ; i<=9 ; i++ )
     28         {
     29             if( rowHas[x][i] )
     30             {
     31                 continue;
     32             }
     33             else if( colHas[y][i] )
     34             {
     35                 continue;
     36             }
     37             else
     38             {
     39                 int xx = u/9/3*3;
     40                 int yy = u%9/3*3;
     41                 for( int j = xx ; j<xx+3 ; j++ )
     42                 {
     43                     for( int k = yy ; k<yy+3 ; k++ )
     44                     {
     45                         if( sudu[j][k] == i )
     46                         {
     47                             end = true;
     48                             break;
     49                         }
     50                     }
     51                     if( end )
     52                         break;
     53                 }        
     54             }
     55             if( end )
     56             {
     57                 end = false;
     58                 continue;
     59             }
     60             sudu[x][y] = i;
     61             rowHas[x][i] = true;
     62             colHas[y][i] = true;
     63             dfs( u+1 );
     64             if( flag )
     65             {
     66                 return;
     67             }
     68             rowHas[x][i] = false;
     69             colHas[y][i] = false;
     70             sudu[x][y] = 0;
     71         }
     72     }
     73 }
     74 
     75 int main()
     76 {
     77     int n;
     78     char ch;
     79     while( cin >> n )
     80     {
     81         while(n--)
     82         {
     83             flag = false; 
     84             memset( rowHas , false , sizeof(rowHas) );
     85             memset( colHas , false , sizeof(colHas) );
     86             for( int i = 0 ; i<9 ; i++ )
     87             {
     88                 for( int j = 0 ; j<9 ; j++ )
     89                 {
     90                     cin >> ch;
     91                     sudu[i][j] = ch-'0';
     92                     if( sudu[i][j] )
     93                     {
     94                         rowHas[i][ sudu[i][j] ] = true;    
     95                         colHas[j][ sudu[i][j] ] = true;
     96                     }
     97                 }
     98             }
     99             dfs( 0 );
    100             for( int i = 0 ; i<9 ; i++ )
    101             {
    102                 for( int j = 0 ; j<9 ; j++ )
    103                 {
    104                     cout << sudu[i][j];
    105                 }
    106                 cout << endl;
    107             }
    108         }
    109     }    
    110     return 0;
    111 }
    View Code

    today:

      十年前 我要生如夏花

      十年后 我要平凡一生

    just follow your heart
  • 相关阅读:
    html 基本布局介绍
    Hbase1.1.x Java版之批量查删操作
    java命令执行jar文件
    【转】python多版本并存,python3安装pip
    JavaHbase连接代码示例
    Shell执行将脚本里的变量打印到指定日志文件
    Datax将本地文件导入Hbase数据库!!!酷酷酷
    shell关于日期的加减
    python2安装pymongo
    Python从MongoDB中按天读取数据并格式化日志
  • 原文地址:https://www.cnblogs.com/radical/p/3852520.html
Copyright © 2020-2023  润新知