hdu 1043

#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*,,可惜能过。。。~_~ !



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值