洛谷Oj-奇怪的电梯-广度优先搜索
来源:互联网 发布:监测网络流量的软件 编辑:程序博客网 时间:2024/06/05 07:48
问题描述:
呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮呢?
AC代码:
struct ele//加入队列后,很难知道当前是第几层,所以要特别设计这样的一个结构体{ int i;//当前第i层 int k;//可以向上(下)走k层 int cnt;//记录操作数};ele e[210];int book[500];//标记数组,对提高搜索效率很有帮助queue<ele> q;//队列int main(){ int n,a,b; //输入 cin >> n >> a >> b; for(int i = 1; i <= n; ++i) { e[i].i = i;//第i层 scanf("%d",&e[i].k);//可以上下k层 } q.push(e[a]);//将第a层入队 book[a] = 1;//标记,防止之后再次走到第a层(又回到了解放前0.0) while(!q.empty())//队列不为空 { ele t = q.front();//访问队首元素 if(t.i == b)//如果队首是第b层,成功完成任务,输出操作次数 { cout << t.cnt << endl; return 0;//程序出口 } if(t.i + t.k <= n && book[t.i + t.k] == 0)//可以向上走,别忘了判重!!! { e[t.i + t.k].cnt = t.cnt + 1;//操作数由第t.i层的操作数继承而来 q.push(e[t.i + t.k]);//入队 book[t.i + t.k] = 1;//标记 } if(t.i - t.k >= 1 && book[t.i - t.k] == 0)//可以向下走 { e[t.i - t.k].cnt = t.cnt + 1;//操作数由第t.i层的操作数继承而来 q.push(e[t.i - t.k]);//入队 book[t.i - t.k] = 1;//标记 } q.pop();//出队 } cout << -1 << endl;//无解 return 0;}
解决方法:
这道题一看到要求最小值,就觉得递推是用来计数的,怎么能用来求最优值呢?不太明白
类比到求最短路径,想到用广搜,思路特别地清晰,2A
改天复习的时候一定要去题解学习一下递推的方法,就酱
阅读全文
0 0
- 洛谷Oj-奇怪的电梯-广度优先搜索
- 奇怪的电梯(广度优先搜索)
- ACM-奇怪的电梯(广度优先搜索、AC)
- 奇怪的电梯解题报告(广度优先搜索)
- 广度优先搜索练习之神奇的电梯
- 广度优先搜索练习之神奇的电梯----BFS
- SDUT 3468 广度优先搜索练习之神奇的电梯
- 广度优先搜索练习之神奇的电梯
- 广度优先搜索练习之神奇的电梯
- sdutacm-广度优先搜索练习之神奇的电梯
- 广度优先搜索练习之神奇的电梯
- 广度优先搜索练习之神奇的电梯
- 洛谷Oj-01迷宫-广度优先搜索
- 洛谷Oj-字串变换-广度优先搜索
- sdut 3468 广度优先搜索练习之神奇的电梯(BFS)
- [SDUT](3468)广度优先搜索练习之神奇的电梯 ---BFS(图)
- SDUT-3468 广度优先搜索练习之神奇的电梯(BFS)
- 洛谷Oj-P1162 填涂颜色-广度优先搜索
- AngularJS 自定义过滤器
- Fragmentxml
- 面试题07:Count the smiley faces!
- 一步一步带你搭建后台管理系统之使用requirejs整合常用前端插件
- PyTorch基本用法(九)——优化器
- 洛谷Oj-奇怪的电梯-广度优先搜索
- LoginActivityQQ登陆
- Ai challenger 场景分类: train softmax using tfrecord
- spring之基于aspectj注解aop使用
- SQL Server中的STUFF函数的使用
- JAVA语言的三种技术架构
- HDU 1001 Sum Problem JAVA
- 批量提取文件名称
- ListView_itemxml