pe无数次,也是醉了,开始一直觉得很难不敢做,后来才发现这是水题
#include<iostream>
using namespace std;
int mapp[10][10];
int flag;
int jduge(int x,int y,int num)
{
for(int i=0;i<10;i++)
{
if(mapp[x][i]==num&&i!=y){return 0;}
else if(mapp[i][y]==num&&i!=x){return 0;}
}
int xx=x/3*3,yy=y/3*3;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(mapp[xx+i][yy+j]==num&&!(i==x&&j==y))
{
return 0;
}
}
}
return 1;
}
void dfs(int d)
{
if(d==81){flag=1;return;}
int x=d/9;
int y=d%9;
if(mapp[x][y]==-1)
{
for(int i=1;i<=9;i++)
{
if(jduge(x,y,i))
{
mapp[x][y]=i;
dfs(d+1);
if(flag){return;}
mapp[x][y]=-1;
}
}
}
else dfs(d+1);
}
void input()
{
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
if(!i&&!j){continue;}
char x;
cin>>x;
if(x=='?') mapp[i][j]=-1;
else mapp[i][j]=x-'0';
}
}
}
void print()
{
for(int i=0;i<9;i++)
{
cout<<mapp[i][0];
for(int j=1;j<9;j++)
{
cout<<" "<<mapp[i][j];
}
cout<<endl;
}
}
int main()
{
cin.sync_with_stdio(false);
char x;
int sum=0;
while(cin>>x)
{
if(x=='?') mapp[0][0]=-1;
else mapp[0][0]=x-'0';
input();
flag=0;
dfs(0);
if(sum++) cout<<endl;
print();
}
return 0;
}