Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6056 Accepted Submission(s): 2238
1 #include <iostream> 2 #include <iomanip> 3 #include <fstream> 4 #include <sstream> 5 #include <algorithm> 6 #include <string> 7 #include <set> 8 #include <utility> 9 #include <queue> 10 #include <stack> 11 #include <list> 12 #include <vector> 13 #include <cstdio> 14 #include <cstdlib> 15 #include <cstring> 16 #include <cmath> 17 #include <ctime> 18 #include <ctype.h> 19 using namespace std; 20 21 int n,a,b; 22 int vst[202]; 23 int table[202][202]; 24 25 struct node 26 { 27 int floor; 28 int step; 29 }Node; 30 31 void bfs() 32 { 33 int i; 34 node pre,last; 35 pre.floor=a; 36 pre.step=0; 37 vst[a]=1; 38 bool flag=false; 39 queue<node>Que; 40 Que.push(pre); 41 while(!Que.empty()) 42 { 43 pre=Que.front(); 44 Que.pop(); 45 if(pre.floor==b) 46 { 47 flag=true; 48 break; 49 } 50 if(pre.step>=n) 51 break; 52 for(i=1;i<=n;i++) 53 { 54 last.floor=i; 55 last.step=pre.step+1; 56 if(table[pre.floor][last.floor]&&vst[last.floor]==0) 57 { 58 vst[last.floor]=1; 59 Que.push(last); 60 } 61 } 62 } 63 if(!flag) 64 { 65 printf("-1\n"); 66 return; 67 } 68 printf("%d\n",pre.step); 69 } 70 71 int main() 72 { 73 int i; 74 int temp; 75 while(~scanf("%d",&n),n) 76 { 77 scanf("%d%d",&a,&b); 78 memset(table,0,sizeof(table)); 79 memset(vst,0,sizeof(vst)); 80 for(i=1;i<=n;i++) 81 { 82 scanf("%d",&temp); 83 if((i-temp)>0) 84 table[i][i-temp]=1; 85 if((i+temp)<=n) 86 table[i][i+temp]=1; 87 } 88 if(a==b) 89 { 90 printf("0\n"); 91 continue; 92 } 93 bfs(); 94 } 95 return 0; 96 }