hdu 1548 A strange lift
来源:互联网 发布:红海军知乎 编辑:程序博客网 时间:2024/06/05 02:33
http://acm.hdu.edu.cn/showproblem.php?pid=1548
这个题可以用搜索做,因为是求最短时间,搜索则直接想到广搜(BFS)。
问题:首先告诉你有n层楼,要你求从第A层楼到第B层楼的最短时间。
限制及条件:
1、每层楼只能按上或者下,而且上或者下的楼层数是不同的,需要输入的。
2、上下楼不能到达不存在的楼层(小于1楼或者大于n楼)。
3、1<=n,A,B<=200
AC代码:
#include<iostream>#include<cstdio>#include<queue>#include<cstring>using namespace std;struct Node{ int f; int i;};int floor[210];int yn[210];int Bfs(int n, int a, int b){ Node now,next; queue<Node> q; now.f = a; now.i = 0; q.push(now); while(!q.empty()) { now = q.front(); q.pop(); yn[now.f] = 2; //标记此楼已经到达 // printf("%d %d\n",now.f,now.i); if(now.f == b) //判断是否到达指定楼层 { return now.i; } else { next.i = now.i+1; next.f = now.f+floor[now.f]; //向上走 if(next.f > 0 && next.f <= 200 && yn[next.f] == 0) { yn[next.f] = 1; //标记此楼 q.push(next); } next.f = now.f-floor[now.f]; //向下走 if(next.f > 0 && next.f <= 200 && yn[next.f] == 0) { yn[next.f] = 1; //标记此楼 q.push(next); } } } return -1;}int main(){ int n,a,b; int i,num; while(scanf("%d",&n)&&n) { memset(yn,0,sizeof(yn)); for(i = 0; i< 210; i++) { floor[i] = 1000; } scanf("%d%d",&a,&b); for(i = 1; i <= n; i++) { scanf("%d",&floor[i]); } num = Bfs(n,a,b); printf("%d\n",num); } return 0;}
- A strange lift hdu 1548
- HDU 1548 A strange lift
- HDU 1548 A strange lift
- HDU 1548 A strange lift
- Hdu-1548 A strange lift
- HDU 1548 A strange lift
- HDU-1548-A strange lift
- hdu 1548 A strange lift
- HDU 1548-A strange lift
- HDU 1548 A strange lift
- hdu 1548 A strange lift
- hdu 1548 A strange lift
- HDU 1548 A strange lift
- hdu 1548 a strange lift
- HDU 1548 A strange lift
- HDU 1548 A strange lift
- hdu 1548 A strange lift
- hdu 1548 A strange lift
- 【编写可读代码的艺术】第二部分 简化循环和逻辑
- iostat、top查看系统性能统计\hdparm查看磁盘的速度
- 【编写可读代码的艺术】第三部分 重新组织你的代码
- 【编写可读代码的艺术】第四部分 精选话题
- C#修改电脑密码,重置电脑密码DirectoryEntry实现
- hdu 1548 A strange lift
- Gridview合并列中相同信息行的方法
- 基于.NET的WebService的实现
- 【程序设计实践】第1章 风格
- 【程序设计实践】第2章 算法和数据结构
- 跨平台移动开发:Android配置PhoneGap
- 【程序设计实践】第3章 设计与实现
- 结构体struct用法手札
- 【程序设计实践】第4章 界面