题解 | #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);
}

全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务