#include<iostream>
#include<fstream>
using namespace std;
char map[10][10];
int empty[82][2];
int a[10][10];
int b[10][10];
int c[10][10];
int ok(int s,int t){
return (s-1)/3*3+(t-1)/3+1;
}
int len;
int dfs(int s){
int x,y,i;
x=empty[s][0];
y=empty[s][1];
if(s==len+1)
{
return 1;
}
for(i=1;i<=9;i++)
if(a[x][i]==0&&b[y][i]==0&&c[ok(x,y)][i]==0)
{
a[x][i]=1;
b[y][i]=1;
c[ok(x,y)][i]=1;
map[x][y]=i+'0';
if(dfs(s+1)) return 1;
a[x][i]=0;
b[y][i]=0;
c[ok(x,y)][i]=0;
}
return 0;
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
int cas;
cin>>cas;
for(k=1;k<=cas;k++)
{
len=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
{
cin>>map[i][j];
if(map[i][j]=='0')
{
empty[++len][0]=i;
empty[len][1]=j;
}
else
{
a[i][map[i][j]-'0']=1;
b[j][map[i][j]-'0']=1;
c[ok(i,j)][map[i][j]-'0']=1;
}
}
dfs(1);
cout<<"Scenario #"<<k<<":"<<endl;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
cout<<map[i][j];
cout<<endl;
}
cout<<endl;
}
}
int main(){
read();
return 0;
}
转载于:https://www.cnblogs.com/zhaozhe/archive/2011/07/07/2099908.html