#include<cstdio> //char打表,测试没问题,,但会超内存,测试中至少有30步的。
#include<cstdlib>
#include<map>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e6;
int _a[5][5];
int a[15]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};//how many :0
char ans[N];
map<int,int>pq;
char can_to[400000][20];
int book[N];
struct Path
{
int pre,dir;
int value;
}path[N+100];
int _next[4][2]={0,1,1,0,0,-1,-1,0};
void init()
{
int mark=1;
int num[9]={1,2,3,4,5,6,7,8,9};
do
{
LL temp=0;
for(int i=0;i<9;i++)
{
temp=temp*10+num[i];
}
pq[temp]=mark++;
}while(next_permutation(num,num+9));
}
struct Node
{
//string dir;
int _x,_y,_value;
int id;
};
char f(int ch)
{
if(ch==0) return 'r';
else if(ch==1) return 'd';
else if(ch==2) return 'l';
else return 'u';
}
int _change(int x,int from,int to)
{
if(from>to){swap(from,to);}
int w1=9-from,w2=9-to;
int du_1=x/a[w1+1],du_2,du_3=x%a[w2];
int ans;
if(to-from==3){
du_2=x/a[w2]%10000;
int x=du_2/1000,y=du_2/10%100,z=du_2%10;
ans=du_1*a[w1+1]+(z*1000+y*10+x)*a[w2]+du_3;
}
else{
du_2=x/a[w2]%100;
int x=du_2/10,y=du_2%10;
ans=du_1*a[w1+1]+(y*10+x)*a[w2]+du_3;
}
return ans;
}
int change(int x,int from,int to)
{
int _temp[12];
for(int i=9;i>=1;i--) {_temp[i]=x%10;x=x/10;}
swap(_temp[from],_temp[to]);
int ans=0;
for(int i=1;i<=9;i++) ans=ans*10+_temp[i];
return ans;
}
char Ans[N];
int pos;
void dfs(int _num)
{
if(path[_num].pre==-1){return;}
dfs(path[_num].pre);
Ans[pos]=f(path[_num].dir);
pos++;
}
void o_o()
{
//printf("Ans=%s\n",Ans);
int i,j,k;
for(i=0;i<pos;i++)
{
//printf("value=%d %d ",path[i].value,pq[path[i].value]);
for(k=0,j=i;j<pos;j++,k++) can_to[pq[path[i].value]][k]=Ans[j];
can_to[pq[path[i].value]][k]='\0';
//cout<<"=";for(j=0;j<k;j++) printf("%c",can_to[pq[path[i].value]][j]);cout<<" ";
//printf("%s\n",can_to[pq[path[i].value]]);
}
}
int bfs(int _x,int _y,int _value)
{
//printf("_value=%d\n",_value);
memset(book,0,sizeof(book));
int _num=0;
queue<Node> que;
while(!que.empty()) que.pop();
Node temp;
temp._value=_value,temp._x=_x,temp._y=_y,temp.id=_num;
path[_num].dir=-1,path[_num].pre=-1,path[_num].value=_value;
book[pq[_value]]=1;
_num++;
que.push(temp);
while(!que.empty())
{
Node temp1=que.front();que.pop();
int x=temp1._x,y=temp1._y,value=temp1._value,id=temp1.id;
for(int i=0;i<4;i++)
{
int tx=x+_next[i][0],ty=y+_next[i][1];
if(tx<1||tx>3||ty<1||ty>3) continue;
int temp_value=_change(value,(x-1)*3+y,(tx-1)*3+ty);
if(book[pq[temp_value]]) continue;
book[pq[temp_value]]=1;
Node temp2;
temp2._value=temp_value,temp2._x=tx,temp2._y=ty;
temp2.id=_num;
path[_num].dir=i,path[_num].pre=id,path[_num].value=temp_value;
if(temp_value==123456789||can_to[pq[temp_value]][0])
{
pos=0;
dfs(_num);
Ans[pos]='\0';
strcat(Ans,can_to[pq[temp_value]]);
pos=strlen(Ans);
o_o();
printf("%s\n",Ans);
//printf("%d %d %s\n",_value,pq[_value],can_to[pq[_value]]);
return _num;
}
_num++;
que.push(temp2);
}
}
return 0;
}
int main()
{
//freopen("C:/Users/hzy/Desktop/11.txt","r",stdin);
init();
/* int num[9]={1,2,3,4,5,6,7,8,9};
do
{
int _num=0,value=0,x,y;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
_a[i][j]=num[_num];
if(num[_num]==9){x=i,y=j;}
value=value*10+num[_num];
_num++;
}
}
//for(int i=0;i<9;i++) printf("%d",num[i]);printf(" ");
int temp[20],num=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(_a[i][j]!=9) temp[num++]=_a[i][j];
int sum=0;
for(int i=0;i<9;i++)
for(int j=i+1;j<9;j++)
if(temp[i]>temp[j]) sum++;
if(sum&1) {printf("unsolvable\n");continue;}
int _ans=bfs(x,y,value);
if(_ans==0) printf("unsolvable\n");
}while(next_permutation(num,num+9));
*/
char str[10];
while(scanf("%s",str)!=EOF)
{
int x,y,value;
if(str[0]=='x') {value=9;_a[1][1]=9;}
else {value=str[0]-'0';_a[1][1]=str[0]-'0';}
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(i==1&&j==1) continue;
scanf("%s",str);
if(str[0]=='x') {_a[i][j]=9;value=value*10+9;x=i,y=j;}
else {_a[i][j]=str[0]-'0';value=value*10+str[0]-'0';}
}
}
int ok=1,temp[20],num=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(_a[i][j]!=9) temp[num++]=_a[i][j];
int sum=0;
for(int i=0;i<9;i++)
for(int j=i+1;j<9;j++)
if(temp[i]>temp[j]) sum++;
if(sum&1) {printf("unsolvable\n");continue;}
if(value==123456789){printf("0\n");continue;}
int _ans=bfs(x,y,value);
//if(_ans==0) printf("unsolvable\n");
}
return 0;
}
#include<cstdio>//vector打表,,测试有问题,stl神奇了。。
#include<cstdlib>
#include<map>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e6;
int _a[5][5];
int a[15]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};//how many :0
char ans[N];
map<int,int>pq;
vector<char>can_to[400000];
int book[N];
struct Path
{
int pre,dir;
int value;
}path[N+100];
int _next[4][2]={0,1,1,0,0,-1,-1,0};
void init()
{
int mark=1;
int num[9]={1,2,3,4,5,6,7,8,9};
do
{
LL temp=0;
for(int i=0;i<9;i++)
{
temp=temp*10+num[i];
}
pq[temp]=mark++;
}while(next_permutation(num,num+9));
}
struct Node
{
int _x,_y,_value;
int id;
};
char f(int ch)
{
if(ch==0) return 'r';
else if(ch==1) return 'd';
else if(ch==2) return 'l';
else return 'u';
}
int _change(int x,int from,int to)
{
if(from>to){swap(from,to);}
int w1=9-from,w2=9-to;
int du_1=x/a[w1+1],du_2,du_3=x%a[w2];
int ans;
if(to-from==3){
du_2=x/a[w2]%10000;
int x=du_2/1000,y=du_2/10%100,z=du_2%10;
ans=du_1*a[w1+1]+(z*1000+y*10+x)*a[w2]+du_3;
}
else{
du_2=x/a[w2]%100;
int x=du_2/10,y=du_2%10;
ans=du_1*a[w1+1]+(y*10+x)*a[w2]+du_3;
}
return ans;
}
char Ans[N];
int pos;
void dfs(int _num)
{
if(path[_num].pre==-1){return;}
dfs(path[_num].pre);
Ans[pos]=f(path[_num].dir);
pos++;
}
void o_o()
{
int i,j;
for(i=0;i<pos;i++)
{
for(j=i;j<pos;j++) can_to[pq[path[i].value]].push_back(Ans[j]);
}
}
int bfs(int _x,int _y,int _value)
{
memset(book,0,sizeof(book));
int _num=0;
queue<Node> que;
while(!que.empty()) que.pop();
Node temp;
temp._value=_value,temp._x=_x,temp._y=_y,temp.id=_num;
path[_num].dir=-1,path[_num].pre=-1,path[_num].value=_value;
book[pq[_value]]=1;
_num++;
que.push(temp);
while(!que.empty())
{
Node temp1=que.front();que.pop();
int x=temp1._x,y=temp1._y,value=temp1._value,id=temp1.id;
for(int i=0;i<4;i++)
{
int tx=x+_next[i][0],ty=y+_next[i][1];
if(tx<1||tx>3||ty<1||ty>3) continue;
int temp_value=_change(value,(x-1)*3+y,(tx-1)*3+ty);
if(book[pq[temp_value]]) continue;
book[pq[temp_value]]=1;
Node temp2;
temp2._value=temp_value,temp2._x=tx,temp2._y=ty;
temp2.id=_num;
path[_num].dir=i,path[_num].pre=id,path[_num].value=temp_value;
if(temp_value==123456789||can_to[pq[temp_value]].size())
{
pos=0;
dfs(_num);
Ans[pos]='\0';
for(int i=0;i<can_to[pq[temp_value]].size();i++)
{
Ans[pos++]=can_to[pq[temp_value]][i];
}Ans[pos]='\0';
o_o();
printf("%s\n",Ans);
return _num;
}
_num++;
que.push(temp2);
}
}
return 0;
}
int main()
{
// freopen("C:/Users/hzy/Desktop/11.txt","r",stdin);
init();
/*int num[9]={1,2,3,4,5,6,7,8,9};
do
{
int _num=0,value=0,x,y;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
_a[i][j]=num[_num];
if(num[_num]==9){x=i,y=j;}
value=value*10+num[_num];
_num++;
}
}
for(int i=0;i<9;i++) printf("%d",num[i]);printf(" ");
int temp[20],num=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(_a[i][j]!=9) temp[num++]=_a[i][j];
int sum=0;
for(int i=0;i<9;i++)
for(int j=i+1;j<9;j++)
if(temp[i]>temp[j]) sum++;
if(sum&1) {printf("unsolvable\n");continue;}
int _ans=bfs(x,y,value);
if(_ans==0) printf("unsolvable\n");
}while(next_permutation(num,num+9));
*/
char str[10];
while(scanf("%s",str)!=EOF)
{
int x,y,value;
if(str[0]=='x') {value=9;_a[1][1]=9;}
else {value=str[0]-'0';_a[1][1]=str[0]-'0';}
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(i==1&&j==1) continue;
scanf("%s",str);
if(str[0]=='x') {_a[i][j]=9;value=value*10+9;x=i,y=j;}
else {_a[i][j]=str[0]-'0';value=value*10+str[0]-'0';}
}
}
int ok=1,temp[20],num=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(_a[i][j]!=9) temp[num++]=_a[i][j];
int sum=0;
for(int i=0;i<9;i++)
for(int j=i+1;j<9;j++)
if(temp[i]>temp[j]) sum++;
if(sum&1) {printf("unsolvable\n");continue;}
if(value==123456789){printf("0\n");continue;}
int _ans=bfs(x,y,value);
//if(_ans==0) printf("unsolvable\n");
}
return 0;
}
#include<cstdio>//string 打表,测试有问题,stl神奇了。。
#include<cstdlib>
#include<map>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e6;
int _a[5][5];
int a[15]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};//how many :0
char ans[N];
map<int,int>pq;
string can_to[400000];
int book[N];
struct Path
{
int pre,dir;
int value;
}path[N+100];
int _next[4][2]={0,1,1,0,0,-1,-1,0};
void init()
{
int mark=1;
int num[9]={1,2,3,4,5,6,7,8,9};
do
{
LL temp=0;
for(int i=0;i<9;i++)
{
temp=temp*10+num[i];
}
pq[temp]=mark++;
}while(next_permutation(num,num+9));
}
struct Node
{
int _x,_y,_value;
int id;
};
char f(int ch)
{
if(ch==0) return 'r';
else if(ch==1) return 'd';
else if(ch==2) return 'l';
else return 'u';
}
int _change(int x,int from,int to)
{
if(from>to){swap(from,to);}
int w1=9-from,w2=9-to;
int du_1=x/a[w1+1],du_2,du_3=x%a[w2];
int ans;
if(to-from==3){
du_2=x/a[w2]%10000;
int x=du_2/1000,y=du_2/10%100,z=du_2%10;
ans=du_1*a[w1+1]+(z*1000+y*10+x)*a[w2]+du_3;
}
else{
du_2=x/a[w2]%100;
int x=du_2/10,y=du_2%10;
ans=du_1*a[w1+1]+(y*10+x)*a[w2]+du_3;
}
return ans;
}
char Ans[N];
int pos;
void dfs(int _num)
{
if(path[_num].pre==-1){return;}
dfs(path[_num].pre);
Ans[pos]=f(path[_num].dir);
pos++;
}
void o_o()
{
int i,j;
for(i=0;i<pos;i++)
{
for(j=i;j<pos;j++) can_to[pq[path[i].value]]+=Ans[j];
}
}
int bfs(int _x,int _y,int _value)
{
memset(book,0,sizeof(book));
int _num=0;
queue<Node> que;
while(!que.empty()) que.pop();
Node temp;
temp._value=_value,temp._x=_x,temp._y=_y,temp.id=_num;
path[_num].dir=-1,path[_num].pre=-1,path[_num].value=_value;
book[pq[_value]]=1;
_num++;
que.push(temp);
while(!que.empty())
{
Node temp1=que.front();que.pop();
int x=temp1._x,y=temp1._y,value=temp1._value,id=temp1.id;
for(int i=0;i<4;i++)
{
int tx=x+_next[i][0],ty=y+_next[i][1];
if(tx<1||tx>3||ty<1||ty>3) continue;
int temp_value=_change(value,(x-1)*3+y,(tx-1)*3+ty);
if(book[pq[temp_value]]) continue;
book[pq[temp_value]]=1;
Node temp2;
temp2._value=temp_value,temp2._x=tx,temp2._y=ty;
temp2.id=_num;
path[_num].dir=i,path[_num].pre=id,path[_num].value=temp_value;
if(temp_value==123456789||can_to[pq[temp_value]].size())
{
pos=0;
dfs(_num);
//Ans[pos]='\0';
for(string::iterator it=can_to[pq[temp_value]].begin();it!=can_to[pq[temp_value]].end();it++)
{
Ans[pos++]=*it;
}
// for(int i=0;i<can_to[pq[temp_value]].size();i++)
// {
// Ans[pos++]=can_to[pq[temp_value]][i];
// }
Ans[pos]='\0';
o_o();
printf("%s\n",Ans);
return _num;
}
_num++;
que.push(temp2);
}
}
return 0;
}
int main()
{
// freopen("C:/Users/hzy/Desktop/11.txt","r",stdin);
init();
/* int num[9]={1,2,3,4,5,6,7,8,9};
do
{
int _num=0,value=0,x,y;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
_a[i][j]=num[_num];
if(num[_num]==9){x=i,y=j;}
value=value*10+num[_num];
_num++;
}
}
for(int i=0;i<9;i++) printf("%d",num[i]);printf(" ");
int temp[20],num=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(_a[i][j]!=9) temp[num++]=_a[i][j];
int sum=0;
for(int i=0;i<9;i++)
for(int j=i+1;j<9;j++)
if(temp[i]>temp[j]) sum++;
if(sum&1) {printf("unsolvable\n");continue;}
int _ans=bfs(x,y,value);
if(_ans==0) printf("unsolvable\n");
}while(next_permutation(num,num+9));
*/
char str[10];
while(scanf("%s",str)!=EOF)
{
int x,y,value;
if(str[0]=='x') {value=9;_a[1][1]=9;}
else {value=str[0]-'0';_a[1][1]=str[0]-'0';}
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(i==1&&j==1) continue;
scanf("%s",str);
if(str[0]=='x') {_a[i][j]=9;value=value*10+9;x=i,y=j;}
else {_a[i][j]=str[0]-'0';value=value*10+str[0]-'0';}
}
}
int ok=1,temp[20],num=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(_a[i][j]!=9) temp[num++]=_a[i][j];
int sum=0;
for(int i=0;i<9;i++)
for(int j=i+1;j<9;j++)
if(temp[i]>temp[j]) sum++;
if(sum&1) {printf("unsolvable\n");continue;}
if(value==123456789){printf("0\n");continue;}
int _ans=bfs(x,y,value);
//if(_ans==0) printf("unsolvable\n");
}
return 0;
}
#include<cstdio>//双向广搜,,速度远远不止减了2倍,,其中ceshi()函数神奇了,不能那样一维数组对二维数组赋值,变量能赋成。。
#include<cstdlib>
#include<map>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e6;
char a[4][4];
struct BOOK
{
int U_num,D_num,Value;
}book[N];
char Ans[N];
int Pos;
int f[12];
int _next[4][2]={0,1,1,0,0,-1,-1,0};
struct Path
{
int pre,dir,state;
}path[N+100];
struct Node
{
int id,state;
int c[4][4];
};
void print()
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++) printf("%d ",a[i][j]);
printf("\n");
}cout<<endl;
}
void init()
{
f[0]=1;
for(int i=1;i<10;i++) f[i]=f[i-1]*i;
}
int cantor(int s[])
{
int ans=0;
for(int i=0;i<9;i++)
{
int num=0;
for(int j=i+1;j<9;j++)
{
if(s[i]>s[j]) num++;
}
ans+=num*f[9-i-1];
}
return ans;
}
/*
int value_change(int x,int from,int to)
{
if(from>to){swap(from,to);}
int w1=9-from,w2=9-to;
int du_1=x/a[w1+1],du_2,du_3=x%a[w2];
int ans;
if(to-from==3){
du_2=x/a[w2]%10000;
int x=du_2/1000,y=du_2/10%100,z=du_2%10;
ans=du_1*a[w1+1]+(z*1000+y*10+x)*a[w2]+du_3;
}
else{
du_2=x/a[w2]%100;
int x=du_2/10,y=du_2%10;
ans=du_1*a[w1+1]+(y*10+x)*a[w2]+du_3;
}
return ans;
}*/
int check()
{
int temp[20],num=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(a[i][j]!=9) temp[num++]=a[i][j];
int sum=0;
for(int i=0;i<9;i++)
for(int j=i+1;j<9;j++)
if(temp[i]>temp[j]) sum++;
if(sum&1) {printf("unsolvable\n");return 0;}
return 1;
}
void input()
{
char str[5];
int num=0;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
scanf("%s",str);
if(str[0]=='x') a[i][j]=9;
else a[i][j]=str[0]-'0';
}
}
}
char to_char(int ch)
{
if(ch==0) return 'r';
else if(ch==1) return 'd';
else if(ch==2) return 'l';
else return 'u';
}
char To_char(int ch)
{
if(ch==0) return 'l';
else if(ch==1) return 'u';
else if(ch==2) return 'r';
else return 'd';
}
void U_dfs(int num)
{
if(path[num].pre==-1){return;}
U_dfs(path[num].pre);
Ans[Pos]=to_char(path[num].dir);Pos++;
}
void D_dfs(int num)
{
if(path[num].pre==-1){return;}
Ans[Pos]=To_char(path[num].dir);Pos++;
D_dfs(path[num].pre);
}
void ceshi_dfs(int num)
{
if(path[num].pre==-1) return;
ceshi_dfs(path[num].pre);
printf("%d %d %d\n",path[num].dir,path[num].pre,path[num].state);
}
void bfs()
{
int temp_temp[12],num=0,ca_num=0;
memset(book,0,sizeof(book));
queue<Node> que;
while(!que.empty()) que.pop();
Node temp;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
{
temp.c[i][j]=a[i][j];
temp_temp[num++]=a[i][j];
}
temp.id=ca_num,temp.state=1;
path[ca_num].dir=-1,path[ca_num].pre=-1,path[ca_num].state=1;ca_num++;
que.push(temp);
book[cantor(temp_temp)].Value=1;
num=1;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
{
temp.c[i][j]=num;//printf("%d ",temp.c[i][j]);
temp_temp[num-1]=num++;
}
//for(int i=0;i<9;i++) printf("%d ",temp_temp[i]);printf("\n");
temp.id=ca_num,temp.state=2;
path[ca_num].dir=-1,path[ca_num].pre=-1,path[ca_num].state=2;ca_num++;
que.push(temp);
book[cantor(temp_temp)].Value=2;
while(!que.empty())
{
Node temp1=que.front();que.pop();
int p[5][5],x,y,id=temp1.id,state=temp1.state;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
{
if(temp1.c[i][j]==9) x=i,y=j;
p[i][j]=temp1.c[i][j];
}
for(int i=0;i<4;i++)
{
num=0;
int tx=x+_next[i][0],ty=y+_next[i][1];
if(tx<1||tx>3||ty<1||ty>3) continue;
swap(p[x][y],p[tx][ty]);
Node temp2;
for(int u=1;u<=3;u++)
for(int v=1;v<=3;v++)
{
temp2.c[u][v]=p[u][v];
temp_temp[num++]=p[u][v];
}
int temp_value=cantor(temp_temp);
if(book[temp_value].Value==state) {swap(p[x][y],p[tx][ty]);continue;}
book[temp_value].Value=book[temp_value].Value+state;
if(state==1) book[temp_value].U_num=ca_num;
else book[temp_value].D_num=ca_num;
temp2.id=ca_num,temp2.state=state;
path[ca_num].dir=i,path[ca_num].pre=id,path[ca_num].state=state;
//if(state==2&&temp_value==433) printf("temp_value=%d 2\n",temp_value);
if(book[temp_value].Value==3)
{
Pos=0;
U_dfs(book[temp_value].U_num);
Ans[Pos]='\0';
printf("%s",Ans);
Pos=0;
D_dfs(book[temp_value].D_num);
Ans[Pos]='\0';
printf("%s\n",Ans);
return;
}
ca_num++;
swap(p[x][y],p[tx][ty]);
que.push(temp2);
}
}
//printf("ca_num=%d\n",ca_num);
//print();
}
void ceshi()
{
int num[9]={1,2,3,4,5,6,7,8,9};
int Cnum=0,i,j;
do
{
//for(i=1;i<=3;i++) //神奇了。。
// for(j=1;j<=3;j++)
// a[i][j]=num[Cnum++];
a[1][1]=num[0];a[1][2]=num[1];a[1][3]=num[2];
a[2][1]=num[3];a[2][2]=num[4];a[2][3]=num[5];
a[3][1]=num[6];a[3][2]=num[7];a[3][3]=num[8];;
//print();
if(check()) bfs();
//for(int i=0;i<9;i++) printf("%d",num[i]);cout<<endl;
}while(next_permutation(num,num+9));
}
int main()
{
//freopen("C:/Users/hzy/Desktop/11.txt","r",stdin);
init();
//input();
char str[10];
while(scanf("%s",str)!=EOF)
{
int x,y,value;
if(str[0]=='x') {value=9;a[1][1]=9;}
else {value=str[0]-'0';a[1][1]=str[0]-'0';}
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(i==1&&j==1) continue;
scanf("%s",str);
if(str[0]=='x') {a[i][j]=9;value=value*10+9;x=i,y=j;}
else {a[i][j]=str[0]-'0';value=value*10+str[0]-'0';}
}
}
if(check()) bfs();
//ceshi();
}
return 0;
}
再卡卡时间,,TL,,就再考虑打表的实现,,考虑A*,,可惜能过。。。~_~ !