题解 | #Sudoku#
Sudoku
http://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1
参考了大佬的题解
#include<bits/stdc++.h>
using namespace std;
void shudu(int i,int j);
int a[9][9]={0};
int flag=0;
int main(){
for(int i=0;i<9;++i){
for(int j=0;j<9;++j)
cin>>a[i][j];
}
shudu(0,0);
for(int i=0;i<9;++i){
for(int j=0;j<9;++j){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
void shudu(int i,int j){
if(i>=9||j>=9){
flag=1;
return;
}
if(a[i][j]==0){
set<int> s;
for(int k=0;k<9;++k)
s.insert(a[i][k]);
for(int m=0;m<9;++m)
s.insert(a[m][j]);
for(int m=i/3*3;m<i/3*3+3;++m){
for(int k=j/3*3;k<j/3*3+3;++k){
s.insert(a[m][k]);
}
}
for(int num=1;num<=9;++num){
if(flag==0&&s.find(num)==s.end()){
a[i][j]=num;
if(j==8)
shudu(i+1,0);
else
shudu(i,j+1);
}
}
if(flag==0){
a[i][j]=0;return;
}
}else{
if(j==8)
shudu(i+1,0);
else
shudu(i,j+1);
}
}