博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二届河南省大学生程序设计竞赛 Dr.Kong的机器人
阅读量:6248 次
发布时间:2019-06-22

本文共 1491 字,大约阅读时间需要 4 分钟。

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。
【 样 例 】
标准输入
标准输出
2
5 1 5
3 3 1 2 5
8 5 3
1 2 1 5 3 1 1 1
3
-1

1 #include
2 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,感觉都一样吧!

转载于:https://www.cnblogs.com/shihuajie/archive/2013/04/25/3043554.html

你可能感兴趣的文章
10.23
查看>>
hdu5420 Victor and Proposition
查看>>
如何编写可移植的c/c++代码
查看>>
#pragma pack(n)
查看>>
IntelliJ IDEA 2018.3 升级功能介绍
查看>>
基于.NET平台常用的框架整理
查看>>
【每天一道算法题】Lucky String
查看>>
整合apache+tomcat+keepalived实现高可用tomcat集群
查看>>
计算几何-HPI
查看>>
香农熵学习+例子[转载]
查看>>
利用DE2上的WM8731D/A转换器产生正弦波
查看>>
清除EasyUi combotree下拉树的值
查看>>
手写RPC框架
查看>>
Hadoop 分片、分组与排序
查看>>
使用Windows8开发Metro风格应用一
查看>>
android尺子的自定义view——RulerView
查看>>
将博客搬至CSDN
查看>>
leetcode43
查看>>
直接在安装了redis的Linux机器上操作redis数据存储类型--set类型
查看>>
016——数组(十六)usort uasort uksort
查看>>