HDU1548 奇怪的电梯 最短路 spfa bfs
2017-07-30 15:12
253 查看
题意:电梯每层有一个不同的数字,例如第n层有个数字k,那么这一层只能上k层或下k层,但是不能低于一层或高于n层,给定起点与终点,要求出最少要按几次键。
分析:很不错的一道题。可以搜索,也可以spfs。把每层电梯当作一个点,只要在范围内,最多可以有两条边,边的权值为1。
SPFA
分析:很不错的一道题。可以搜索,也可以spfs。把每层电梯当作一个点,只要在范围内,最多可以有两条边,边的权值为1。
SPFA
#include<iostream> #include<algorithm> #include<queue> #include<vector> #include<cstring> #include<cstdio> #include<map> const int INF=0x3f3f3f3f; typedef long long LL; using namespace std; const int maxn=10055; struct Edge { int e,w; Edge(){} Edge(int _e,int _w):e(_e),w(_w){} }; int dist[maxn]; vector<Edge> G[maxn]; int N,A,B; int spfa(int v,int e) { for(int i=0;i<maxn;i++) dist[i]=INF; queue<int> q; dist[v]=0; q.push(v); while(!q.empty()) { int s=q.front();q.pop(); for(int i=0;i<G[s].size();i++) { int e=G[s][i].e; if(dist[e]>dist[s]+G[s][i].w) { dist[e]=dist[s]+G[s][i].w; q.push(e); } } } return dist[e]; } int main() { // freopen("E:\\ACM\\test.txt","r",stdin); while(cin>>N>>A>>B) { int x; for(int i=0;i<=N;i++) G[i].clear(); for(int i=1;i<=N;i++) { cin>>x; if(i+x<=N) G[i].push_back(Edge(i+x,1)); if(i-x>=1) G[i].push_back(Edge(i-x,1)); } int ans=spfa(A,B); if(ans==INF) puts("-1"); else cout<<ans<<endl; } return 0; }BFS
#include<iostream> #include<algorithm> #include<queue> #include<cstring> #include<cstdio> const int INF=0x3f3f3f3f; typedef long long LL; using namespace std; const int maxn=10055; struct node { int d; //当前的层数 int step; //步数 node(int _d,int _step):d(_d),step(_step){} }; int vis[maxn]; int a[maxn]; int N,A,B; int bfs() { memset(vis,0,sizeof(vis)); queue<node>q; q.push(node(A,0)); vis[A]=1; while(!q.empty()) { node s=q.front();q.pop(); if(s.d==B) return s.step; for(int i=-1;i<=1;i+=2) { int nd=s.d+i*a[s.d]; if(nd>=1&&nd<=N&&!vis[nd]) { q.push(node(nd,s.step+1)); vis[nd]=1; } } } return -1; } int main() { // freopen("E:\\ACM\\test.txt","r",stdin); while(cin>>N>>A>>B) { for(int i=1;i<=N;i++) cin>>a[i]; cout<<bfs()<<endl; } return 0; }
相关文章推荐
- 奇怪的电梯(HDU1548) (Dijkstra)或者(BFS)
- hdu1548 最短路/BFS
- [面试] BFS、Dijstra、SPFA、Floyd求最短路的比较
- 【最短路】奇怪的电梯
- LuoguP1144 最短路计数 解题报告【SPFA/BFS】
- 奇怪的电梯 bfs
- 宽搜(BFS)经典&简单题目 - 奇怪的电梯
- HDU-1548 A strange lift(最短路[Spfa || BFS])
- 【SPFA + DFS/BFS】最短路的一个拓展题
- hdu1548A strange lift——最短路(迪杰斯特拉,spfa)。bfs(队列。数组)
- 【最短路】奇怪的电梯
- 石油大oj 1825奇怪的电梯 bfs
- HDU 1548 A strange lift 奇怪的电梯(BFS,水)
- HDU 4460 Friend Chains(任意两点最短路的最大值 bfs或spfa)
- 【DFS】【最短路】【spfa】【BFS】洛谷P2296 NOIP2014提高组 day2 T2 寻找道路
- POJ 2449 Remmarguts' Date(A*+SPFA)K短路问题
- Poj 1062 昂贵的聘礼【最短路SPFA】
- hdu1874(最短路spfa)
- poj 2387 Til the Cows Come Home 最短路(贝尔曼,迪杰斯特拉,spfa)
- hdu 0 or 1(最短路spfa)(本质,抽象)