标签:des style blog http io ar color os sp
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4534 Accepted Submission(s): 1993
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 #include<cstring> 6 #include<queue> 7 using namespace std; 8 struct node{ 9 int num[6]; 10 int step; 11 }; 12 node first,last; 13 bool vis[10][10][10][10],flag; 14 15 int bfs() 16 { 17 node p,q; 18 int i; 19 memset(vis,false,sizeof(vis)); 20 queue<struct node>Q; 21 first.step=0; 22 p=first; 23 vis[p.num[0]][p.num[1]][p.num[2]][p.num[3]]=true; 24 Q.push(p); 25 while(!Q.empty()) 26 { 27 flag=true; 28 p=Q.front(); 29 Q.pop(); 30 for(i=0;i<4;i++) 31 { 32 if(p.num[i]!=last.num[i]) 33 { 34 flag=false; 35 break; 36 } 37 } 38 if(flag) 39 { 40 return p.step; 41 } 42 for(i=0;i<4;i++)//加法 43 { 44 q=p; 45 if(p.num[i]==9) 46 q.num[i]=1; 47 else 48 q.num[i]=p.num[i]+1; 49 q.step=p.step+1; 50 if(!vis[q.num[0]][q.num[1]][q.num[2]][q.num[3]]) 51 { 52 vis[q.num[0]][q.num[1]][q.num[2]][q.num[3]]=true; 53 Q.push(q); 54 } 55 } 56 for(i=0;i<4;i++)//减法 57 { 58 q=p; 59 if(p.num[i]==1) 60 q.num[i]=9; 61 else 62 q.num[i]=p.num[i]-1; 63 q.step=p.step+1; 64 if(!vis[q.num[0]][q.num[1]][q.num[2]][q.num[3]]) 65 { 66 vis[q.num[0]][q.num[1]][q.num[2]][q.num[3]]=true; 67 Q.push(q); 68 } 69 } 70 for(i=0;i<3;i++)//邻位交换 71 { 72 q=p; 73 if(q.num[i+1]!=p.num[i]) 74 { 75 q.num[i+1]=p.num[i]; 76 q.num[i]=p.num[i+1]; 77 } 78 q.step=p.step+1; 79 if(!vis[q.num[0]][q.num[1]][q.num[2]][q.num[3]]) 80 { 81 vis[q.num[0]][q.num[1]][q.num[2]][q.num[3]]=true; 82 Q.push(q); 83 } 84 } 85 } 86 return 0; 87 } 88 89 90 int main() 91 { 92 int n; 93 char s1[6],s2[6]; 94 scanf("%d",&n); 95 while(n--) 96 { 97 int i; 98 scanf("%s%s",s1,s2); 99 for(i=0;i<4;i++) 100 { 101 first.num[i]=s1[i]-‘0‘; 102 last.num[i]=s2[i]-‘0‘; 103 } 104 int count; 105 count=bfs(); 106 printf("%d\n",count); 107 108 } 109 return 0; 110 }
标签:des style blog http io ar color os sp
原文地址:http://www.cnblogs.com/xuesen1995/p/4125425.html