zoukankan      html  css  js  c++  java
  • POJ2676-Sudoku

    不得不说,这道题真的不难........

    【题目描述】

    数独是一项非常简单的任务。如图所示,具有9行和9列的方形表被分成9个较小的正方形3x3。在一些单元格中写入从1到9的十进制数字。其他单元格为空。目标是用1到9的十进制数字填充空单元格,每个单元格一个数字,这样在每行,每列和每个标记的3x3子方格中,所有数字从1到9出现。编写程序来解决给定的Sudoku任务。 

    【输入】

    输入数据将以测试用例的数量开始。对于每个测试用例,后面跟着9行,对应于表的行。在每一行上给出一串精确的9位十进制数字,对应于该行中的单元格。如果单元格为空,则表示为0。

    【输出】

    对于每个测试用例,您的程序应以与输入数据相同的格式打印解决方案。必须根据规则填充空单元格。如果解决方案不是唯一的,则程序可以打印其中任何一个。

    【输入示例】

    1
    103000509
    002109400
    000704000
    300502006
    060000050
    700803004
    000401000
    009205800
    804000107

    【输出示例】

    143628579
    572139468
    986754231
    391542786
    468917352
    725863914
    237481695
    619275843
    854396127

     

    这道题可以说除了判断九宫格没啥难点。((i-1)/3*3+(j-1)/3+1)

    对了,那些ans是指数字有没有在此行此列中出现过。

    放代码,哈欠~~~~

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

    好了,还有题等着我,拜~~

     

    在暴风雨中低着头,是为了不让雨水模糊风雨后眼中的彩虹。

  • 相关阅读:
    日期时间工具类
    jQuery 使用attr()方式设置 checked 失效原因及解决方法
    vue总结
    【笔记】golang中使用protocol buffers的底层库直接解码二进制数据
    【笔记】对golang的大量小对象的管理真的是无语了……
    【记录一个问题】thanos receiver在更换tsdb文件后,内存并未显著下降
    【笔记】论文阅读:《Gorilla: 一个快速, 可扩展的, 内存式时序数据库》
    【分享】thanos receiver的grafana报表配置
    【采坑小计】thanos receiver的官方文档中,并未说明tsdb落盘的配置方式
    【记录一个问题】thanos receiver在tsdb切换期间,导致remote write接口失败增加
  • 原文地址:https://www.cnblogs.com/DK-F/p/9448516.html
Copyright © 2011-2022 走看看