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