HDU 1548 A strange lift(Dijkstra)
来源:互联网 发布:湖南工业大学网络教学 编辑:程序博客网 时间:2024/05/21 16:04
HDU 1548 A strange lift(Dijkstra)
http://acm.hdu.edu.cn/showproblem.php?pid=1548
题意:
有一个N层的电梯,每层有一个数字k[i],表示你在第i层能通过按up按钮到i+k[i]层去,能通过按down按钮到i-k[i]层去.(当然如果i+k[i]或i-k[i]不属于[1,N]范围,那么你不能动)现在给你层号A和B,问你通过按电梯按钮,最少几次能从A到B.
分析:
其实这就是最短路问题.把每个楼层看成有向图的一个点,当第i层能通过按钮到达j层的时候,有一条i->j的距离为1的边.现在我们只需要求从A到B的最短距离即可.
AC代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#define INF 1e9using namespace std;const int maxn=200+10;struct Edge{ int from,to,dist; Edge(int f,int t,int d):from(f),to(t),dist(d){}};struct HeapNode{ int d,u; HeapNode(int d,int u):d(d),u(u){} bool operator<(const HeapNode& rhs)const { return d>rhs.d; }};struct Dijkstra{ int n,m; vector<Edge> edges; vector<int> G[maxn]; bool done[maxn]; int d[maxn]; void init(int n) { this->n=n; for(int i=0;i<n;i++) G[i].clear(); edges.clear(); } void AddEdge(int from,int to,int dist) { edges.push_back(Edge(from,to,dist)); m = edges.size(); G[from].push_back(m-1); } int dijkstra(int s,int e) { priority_queue<HeapNode> Q; for(int i=0;i<n;i++) d[i]=INF; d[s]=0; memset(done,0,sizeof(done)); Q.push(HeapNode(d[s],s)); while(!Q.empty()) { HeapNode x= Q.top(); Q.pop(); int u=x.u; if(done[u]) continue; done[u]=true; for(int i=0;i<G[u].size();i++) { Edge &e=edges[G[u][i]]; if(d[e.to]>d[u]+e.dist) { d[e.to] = d[u]+e.dist; Q.push(HeapNode(d[e.to],e.to)); } } } if(d[e]==INF) return -1; return d[e]; }}DJ;int main(){ int n,s,e; while(scanf("%d",&n)==1&&n) { scanf("%d%d",&s,&e); s--,e--; DJ.init(n); for(int i=0;i<n;i++) { int k; scanf("%d",&k); if(i+k<n) DJ.AddEdge(i,i+k,1); if(i-k>=0) DJ.AddEdge(i,i-k,1); } printf("%d\n",DJ.dijkstra(s,e)); } return 0;}
0 0
- 【BFS/Dijkstra】hdu 1548 A Strange Lift
- hdu 1548 A strange lift (BFS、Dijkstra)
- 【Dijkstra】-HDU-1548-A strange lift
- HDU 1548 A strange lift(Dijkstra)
- hdu 1548 A strange lift (dijkstra算法)
- HDU - 1548 A strange lift(Dijkstra)
- HDU 1548 A strange lift (Dijkstra算法)
- hdu 1548-A strange lift-最短路-dijkstra
- [HDU 1548]A Strange Lift[Dijkstra最短路]
- hdu 1548 A strange lift Dijkstra+SPFA算法AC
- HDU 1548 A strange lift(Dijkstra、BFS、DP)
- hdu 1548 A strange lift(Dijkstra+合理转换)
- HDU 1548 A strange lift(构造+最短路Dijkstra)
- 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
- 数据结构 队列 (数组)
- 第十三题(输出该链表中倒数第k 个结点)
- MySQL-->基础知识-->linux 下 mysql配置文件 /etc/my.cnf 详细解释
- comfortable-mexican-sofa 安装记录
- linux serial构架分析及驱动开发(4)
- HDU 1548 A strange lift(Dijkstra)
- 黑马程序员——网络一
- 黑马程序员——银行业务系统
- linux serial构架分析及驱动开发(5)
- CHtmlDialog获取指定的ID控件进行操作
- linux serial构架分析及驱动开发(6)
- PHP中的替代语法
- ListView多选
- 添加指定数量的随机联系人