posts - 20,  comments - 6,  trackbacks - 0
  1#include<stdio.h>
  2#include<stdlib.h>
  3#include<string.h>
  4struct ff{
  5    int a,b,c,d;
  6    int step;
  7    struct ff *next;
  8}
;
  9char hash[20][20][20][20];
 10int dir[8][4]={
 11    {1,0,0,0},
 12    {-1,0,0,0},
 13    {0,1,0,0},
 14    {0,-1,0,0},
 15    {0,0,1,0},
 16    {0,0,-1,0},
 17    {0,0,0,1},
 18    {0,0,0,-1}
 19}
;
 20void main()
 21{
 22    int a,key,kk[4],i,j,s1,s2,s3,s4,min;
 23    struct ff *head,*p,*rear;
 24    int n;
 25    while(scanf("%d%*c",&n)!=EOF)
 26    {
 27        for(j=0;j<n;j++)
 28        {
 29            min=99999;
 30            p=(struct ff*)malloc(sizeof(struct ff));
 31            memset(hash,0,sizeof(hash));
 32            scanf("%d%d",&a,&key);
 33            kk[3]=key%10;
 34            kk[2]=key/10%10;
 35            kk[1]=key/100%10;
 36            kk[0]=key/1000%10;
 37            p->d=a%10;
 38            a/=10;
 39            p->c=a%10;
 40            a/=10;
 41            p->b=a%10;
 42            a/=10;
 43            p->a=a%10;
 44            p->step=0;
 45            head=p;
 46            rear=p;
 47            head->next=rear;
 48            rear->next=NULL;
 49            hash[p->a][p->b][p->c][p->d]=1;
 50            while(head)
 51            {
 52                if(head->a==kk[0]&&head->b==kk[1]&&head->c==kk[2]&&head->d==kk[3])
 53                {
 54                    if(head->step<min)
 55                        min=head->step;
 56                    if(head->step==0)break;
 57                }

 58                for(i=0;i<8;i++)
 59                {
 60                    s1=(head->a+dir[i][0])%10;
 61                    s2=(head->b+dir[i][1])%10;
 62                    s3=(head->c+dir[i][2])%10;
 63                    s4=(head->d+dir[i][3])%10;
 64                    if(s1==0&&head->a==1)
 65                    {
 66                        s1=9;
 67                    }

 68                        if(s2==0&&head->b==1)
 69                    {
 70                        s2=9;
 71                    }

 72                        if(s3==0&&head->c==1)
 73                    {
 74                        s3=9;
 75                    }

 76                        if(s4==0&&head->d==1)
 77                    {
 78                        s4=9;
 79                    }

 80                    if(s1==0&&head->a==9)
 81                    {
 82                        s1=1;
 83                    }

 84                        if(s2==0&&head->b==9)
 85                    {
 86                        s2=1;
 87                    }

 88                        if(s3==0&&head->c==9)
 89                    {
 90                        s3=1;
 91                    }

 92                        if(s4==0&&head->d==9)
 93                    {
 94                        s4=1;
 95                    }

 96                    if(hash[s1][s2][s3][s4]==0)
 97                    {
 98                        
 99                        hash[s1][s2][s3][s4]=1;
100                            p=(struct ff*)malloc(sizeof(struct ff));
101                    p->a=s1;
102                    p->b=s2;
103                    p->c=s3;
104                    p->d=s4;
105                        p->step=head->step+1;
106                        p->next=NULL;
107                        rear->next=p;
108                        rear=p;
109                    }

110                }

111                    s1=(head->b);
112                    s2=(head->a);
113                    s3=(head->c);
114                    s4=(head->d);
115                if(hash[s1][s2][s3][s4]==0)
116                    {
117                        hash[s1][s2][s3][s4]=1;
118                    p=(struct ff*)malloc(sizeof(struct ff));
119                        p->a=s1;
120                    p->b=s2;
121                    p->c=s3;
122                    p->d=s4;
123                    p->step=head->step+1;
124                    p->next=NULL;
125                    rear->next=p;
126                    rear=p;
127                    }

128                    s1=(head->a);
129                    s2=(head->c);
130                    s3=(head->b);
131                    s4=(head->d);
132                if(hash[s1][s2][s3][s4]==0)
133                    {
134                        hash[s1][s2][s3][s4]=1;
135                    p=(struct ff*)malloc(sizeof(struct ff));
136                        p->a=s1;
137                    p->b=s2;
138                    p->c=s3;
139                    p->d=s4;
140                        p->step=head->step+1;
141                    p->next=NULL;
142                        rear->next=p;
143                        rear=p;
144                    }

145                    s1=(head->a);
146                    s2=(head->b);
147                    s3=(head->d);
148                    s4=(head->c);
149                if(hash[s1][s2][s3][s4]==0)
150                    {
151                        hash[s1][s2][s3][s4]=1;
152                    p=(struct ff*)malloc(sizeof(struct ff));
153                    p->a=s1;
154                    p->b=s2;
155                    p->c=s3;
156                    p->d=s4;
157                        p->step=head->step+1;
158                    p->next=NULL;
159                        rear->next=p;
160                        rear=p;
161                    }

162                if(head->next)
163                head=head->next;
164                else
165                    break;
166            }

167            printf("%d\n",min);
168        }

169    }

170}
posted on 2009-01-18 22:22 混沌的云 阅读(249) 评论(2)  编辑 收藏 引用

FeedBack:
# re: 1195 Open the Lock (HDU)
2009-01-27 11:36 | AekdyCoin
Orz..大大~:)  回复  更多评论
  
# re: 1195 Open the Lock (HDU)
2009-01-27 13:58 | 混沌的云
@AekdyCoin
你才是大大。。。回@rz  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜