Dr.Kong的机器人
Dr.Kong设计了一个可以前进或后退机器人,该机器人在每个位置i会得到一个移动步数的指令Ki (i=1,2„N),聪明的机器人自己会判断是要前进Ki步还是后退Ki步。例如:给定指令序列(3 3 1 2 5),表示机器人在第1个位置时,可以前进3步到第4个位置,此时后退是不起作用的,出界;机器人在第2个位置时,可以前进3步到第5个位置,此时后退是不起作用的,出界;机器人在第3个位置时,可以前进1步到第4个位置,也可以后退1步到第2个位置等等。你认为,对给定的两个位置A,B, 聪明的机器人从A位置走到B位置至少要判断几次?【标准输入】第一行: M 表示以下有M组测试数据(0<M<=8)接下来每组有两行数据头一行:N A B ( 1≤ N≤ 50, 1≤A,B ≤N )下一行: K1 K2„..Kn ( 0<=Ki<=N )【标准输出】输出有M行,第i行为第i组测试数据的最少判断次数, 若无法到达,则输出-1。【 样 例 】标准输入标准输出25 1 53 3 1 2 58 5 31 2 1 5 3 1 1 13-11 #include2 int loc[55]; 3 int A,B,N,cnt,curLoc,min; 4 int f(int n) 5 { 6 if(n>(B-A+1)) return 0; 7 if(curLoc==B){ 8 if(min>n) min=n; 9 return 1;10 }else{11 int t=loc[curLoc];12 curLoc+=t;13 if(curLoc<=B)14 if(f(n+1)) return 1;15 curLoc-=2*t;16 if(curLoc>=A)17 if(f(n+1)) return 1;18 curLoc+=t;19 }20 return 0;21 }22 int main()23 {24 int i,M;25 scanf("%d",&M);26 while(M--){27 min=0xffff;28 scanf("%d%d%d",&N,&A,&B);29 if(A>B){30 int t=A;31 A=B;32 B=t;33 }34 for(i=A;i<=B;i++)35 scanf("%d",&loc[i]);36 curLoc=A;37 if(f(0)) printf("%d\n",min);38 else printf("-1\n");39 }40 while(1);41 return 0;42 }
用的DFS搜索的,出口是找到终点,或者是搜索次数大于a-b长度,不知这样对不对,反正测试数据是过了,网上查的使用BFS,感觉都一样吧!