标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5355 Accepted Submission(s): 2386
1 /************************************************************************* 2 > File Name: code/hdu/1195.cpp 3 > Author: 111qqz 4 > Email: rkz2013@126.com 5 > Created Time: 2015年10月02日 星期五 14时42分21秒 6 ************************************************************************/ 7 8 #include<iostream> 9 #include<iomanip> 10 #include<cstdio> 11 #include<algorithm> 12 #include<cmath> 13 #include<cstring> 14 #include<string> 15 #include<map> 16 #include<set> 17 #include<queue> 18 #include<vector> 19 #include<stack> 20 #include<cctype> 21 #define yn hez111qqz 22 #define j1 cute111qqz 23 using namespace std; 24 typedef long long LL; 25 typedef double DB; 26 const int inf = 0x3f3f3f3f; 27 int x,y; 28 bool vis[10005]; 29 struct Q 30 { 31 int g,s,b,q; 32 int d; 33 34 }s,tar; 35 36 int add( int x) 37 { 38 int res = 0 ; 39 res = (x+1); 40 if (res == 10) res = 1; 41 return res; 42 } 43 int minu( int x) 44 { 45 int res = 0 ; 46 res = (x-1); 47 if (res==0) res = 9; 48 return res; 49 } 50 51 int get(Q a) 52 { 53 int res = 0 ; 54 res = a.q*1000+a.b*100+a.s*10+a.g; 55 return res; 56 } 57 58 void bfs() 59 { 60 queue<Q>q; 61 q.push(s); 62 63 while (!q.empty()) 64 { 65 66 Q pre = q.front();q.pop(); 67 // cout<<get(pre)<<" "<<pre.d<<endl; 68 if (get(pre)==y) 69 { 70 printf("%d\n",pre.d); 71 // cout<<"aaahhh"<<endl; 72 return; 73 } 74 Q nxt = pre; 75 nxt.d = pre.d + 1; 76 77 nxt.g = add(pre.g); 78 if (!vis[get(nxt)]) 79 { 80 vis[get(nxt)] = true; 81 // nxt.d = pre.d +1; 82 q.push(nxt); 83 } 84 85 nxt.g = minu(pre.g); 86 if (!vis[get(nxt)]) 87 { 88 // nxt.d = pre.d +1; 89 vis[get(nxt)] =true; 90 q.push(nxt); 91 } 92 93 nxt = pre; 94 nxt.d = pre.d+1; 95 nxt.s = add(pre.s); 96 if (!vis[get(nxt)]) 97 { 98 // nxt.d = pre.d +1; 99 vis[get(nxt)]=true; 100 q.push(nxt); 101 } 102 103 nxt.s = minu(pre.s); 104 if (!vis[get(nxt)]) 105 { 106 // nxt.d = pre.d +1; 107 vis[get(nxt)] =true; 108 q.push(nxt); 109 } 110 111 nxt = pre; 112 nxt.d = pre.d+1; 113 nxt.b =add(pre.b); 114 if (!vis[get(nxt)]) 115 { 116 // nxt.d = pre.d +1; 117 vis[get(nxt)] = true; 118 q.push(nxt); 119 } 120 121 nxt.b =minu(pre.b); 122 if (!vis[get(nxt)]) 123 { 124 //nxt.d = pre.d +1; 125 vis[get(nxt)] = true; 126 q.push(nxt); 127 } 128 129 nxt = pre; 130 nxt.d = pre.d+1; 131 nxt.q =add(pre.q); 132 if (!vis[get(nxt)]) 133 { 134 // nxt.d = pre.d +1; 135 vis[get(nxt)] = true; 136 q.push(nxt); 137 } 138 139 nxt.q = minu(pre.q); 140 if (!vis[get(nxt)]) 141 { 142 // nxt.d = pre.d +1; 143 vis[get(nxt)]= true; 144 q.push(nxt); 145 } 146 147 nxt = pre; 148 nxt.d = pre.d+1; 149 nxt.g = pre.s; 150 nxt.s = pre.g; 151 if (!vis[get(nxt)]) 152 { 153 // nxt.d = pre.d +1; 154 vis[get(nxt)] = true; 155 q.push(nxt); 156 } 157 158 nxt = pre; 159 nxt.d = pre.d+1; 160 nxt.s = pre.b; 161 nxt.b = pre.s; 162 if (!vis[get(nxt)]) 163 { 164 // nxt.d = pre.d +1; 165 vis[get(nxt)] = true; 166 q.push(nxt); 167 } 168 169 nxt = pre; 170 nxt.d = pre.d+1; 171 nxt.b = pre.q; 172 nxt.q = pre.b; 173 if (!vis[get(nxt)]) 174 { 175 // nxt.d = pre.d +1; 176 vis[get(nxt)] = true; 177 q.push(nxt); 178 } 179 } 180 } 181 int main() 182 { 183 #ifndef ONLINE_JUDGE 184 freopen("in.txt","r",stdin); 185 #endif 186 int T; 187 scanf("%d",&T); 188 while (T--) 189 { 190 memset(vis,false,sizeof(vis)); 191 scanf("%d %d",&x,&y); 192 s.g = x %10; 193 s.s = x%100/10; 194 s.b = x/100%10; 195 s.q = x/1000; 196 s.d = 0 ; 197 vis[x] = true; 198 bfs(); 199 200 } 201 202 #ifndef ONLINE_JUDGE 203 fclose(stdin); 204 #endif 205 return 0; 206 }
标签:
原文地址:http://www.cnblogs.com/111qqz/p/4852400.html