题解 | #Sudoku#

Sudoku

http://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1

用例虽然通不过,但因为答案不唯一,自己检测答案是正确的。
#include<iostream>
#include<set>
using namespace std;

 void a(int b[9][9] )
    {
      for(int m=0;m<=8;m++)
            {
      for(int i=0;i<8;i++)
     {
          for(int j=i+1;j<=8;j++)
          {
                if(b[i][m]==b[j][m]&&b[i][m]!=0&&b[j][m]!=0)
                {
                    return;
                }
            }
          }
     }
      for(int m=0;m<=8;m++)
            {
       for(int i=0;i<8;i++)
     {
          for(int j=i+1;j<=8;j++)
          {
                if(b[m][i]==b[m][j]&&b[m][i]!=0&&b[m][j]!=0)
                {
                    return;
                }
            }
          }
     }
     for(int i=0;i<3;i++)
     {
         for(int j=0;j<3;j++)
         {
             set<int>e;
             int f=9;
             for(int m=0;m<3;m++)
             {
                 for(int n=0;n<3;n++)
                 {
                     if(b[3*i+m][3*j+n]!=0)
                     {
                         e.insert(b[3*i+m][3*j+n]);
                     }
                     else 
                     {
                         f--;
                     }
                 }
         }
             if(e.size()!=f)
             {
                 return;
             }
     }
     }
     int c=0;
       for(int i=0;i<=8;i++)
       {
           for(int j=0;j<=8;j++)
           {
             if(b[i][j]>0&&b[i][j]<=9)
             {
                c++;
             }
           }
       } 
     if(c==81)
     {
         for(int i=0;i<=8;i++)
       {
           for(int j=0;j<=8;j++)
           {
               cout<<b[i][j]<<' ';
           }
             cout<<endl;
         }
         return;
     }
      for(int i=0;i<=8;i++)
       {
           for(int j=0;j<=8;j++)
           {
               if(b[i][j]==0)
               {
                   for(int m=1;m<=9;m++)
                   {
                       
                       b[i][j]=m;
                      a(b);
                   }
               }
      }
 }
    }
int main()
{
  int x[9][9];
    for(int i=0;i<=8;i++)
       {
           for(int j=0;j<=8;j++)
           {
               cin>>x[i][j];
           }
    }
    a(x);
    return(0);
}

全部评论

相关推荐

在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务