hdu_1548 A strange lift
来源:互联网 发布:淘宝开虚拟充值网店 编辑:程序博客网 时间:2024/05/16 03:31
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548
分析:广度优先搜索。对满足条件的楼层入队列,第一次得到的目的楼层一定是最少次数到达的。
我的代码:
#include<stdio.h>#include<queue>#include<algorithm>using namespace std;struct Node{ int floor; //楼层数 int k; //在本楼可走的步数。 int num;};int n,s,e; //楼数,起始点,结束点。Node p[205];bool visited[205];queue<Node> Q;bool flag;int ans;void BFS(){ while(!Q.empty()) Q.pop(); p[s].num=0; Q.push(p[s]); visited[s]=1; while(!Q.empty()) { Node T=Q.front(); Q.pop(); if(T.floor==e) { flag=1; ans=T.num; } int nfloor; nfloor=T.floor+T.k; //向上走 if(nfloor<=n&&!visited[nfloor]) //要先判断nfloor是否溢出,不然的话数组会越界。 { visited[nfloor]=1; p[nfloor].num=T.num+1; Q.push(p[nfloor]); } nfloor=T.floor-T.k; //向下走 if(nfloor>=1&&!visited[nfloor]) { visited[nfloor]=1; p[nfloor].num=T.num+1; Q.push(p[nfloor]); } }}int main(){ while(~scanf("%d",&n)&&n) { scanf("%d%d",&s,&e); int i; for(i=1;i<=n;i++) { scanf("%d",&p[i].k); p[i].floor=i; p[i].num=0; visited[i]=0; } flag=false; BFS(); if(flag) printf("%d\n",ans); else printf("-1\n"); } return 0;}
总结:开始时没有开visited数组,没有标志导致 Memory Limit Exceeded -_-|||
- hdu_1548 A strange lift
- HDU A strange lift
- HDUOJ1548 A strange lift
- hdu1548 A strange lift
- HDOJ A strange lift
- A strange lift
- A strange lift(BFS)
- A strange lift
- A strange lift
- A strange lift
- HDU1548 A strange lift
- HDU A strange lift
- a strange lift
- HDU1548 A strange lift
- poj1548 A strange lift
- A strange lift
- A strange lift
- hdu1548 A strange lift
- android 把数据导入到excel文件中的三种方法
- 用宏来实现对日期的操作
- 开发者需知的10类工具
- HDU2616 Kill the monster
- 单链表冒泡排序
- hdu_1548 A strange lift
- C++编程实用技巧 #32:尽可能地推迟变量的定义
- LLVM每日谈之十六 LLVM的学习感悟
- Lucene Payload 的研究与应用
- 创建进程间共享内存映射
- C# 时间格式 转 为英文
- C调用Cpp代码时的enum类型定义共享问题
- Interface与Abstract class的异同
- Perl内置特殊变量