HDU 1548 A strange lift
2012-09-03 21:00
253 查看
本以为可以用简单的dfs搜索过掉,但总WA;
看了牛人的思路,此题可以转化为dijkstra题来解;
对每一层的上下i+k[i]和i-k[i]合法,其路径长度置1;
看了牛人的思路,此题可以转化为dijkstra题来解;
对每一层的上下i+k[i]和i-k[i]合法,其路径长度置1;
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=202; const int INF=1<<29; int path ,d ; bool s ; void dijkstra(int a,int b,int n) { int i,j,u; memset(s,0,sizeof(s)); for(i=1;i<=n;i++) d[i]=path[a][i]; d[a]=0;s[a]=1; for(i=0;i<n;i++) { int temp=INF; for(j=1;j<=n;j++) if(!s[j]&&d[j]<temp) temp=d[u=j]; s[u]=1; for(j=1;j<=n;j++) { if(!s[j]&&d[j]>d[u]+path[u][j]) d[j]=d[u]+path[u][j]; } } } int main() { int i,j,n,a,b,k; while(scanf("%d",&n)!=EOF&&n) { scanf("%d%d",&a,&b); for(i=1;i<=n;i++) for(j=1;j<=n;j++) path[i][j]=INF;//初始化; for(i=1;i<=n;i++) { scanf("%d",&k); if((i+k)<=n) path[i][i+k]=1;//press up; if((i-k)>=1) path[i][i-k]=1;//press down; } dijkstra(a,b,n); if(d[b]==INF) printf("-1\n"); else printf("%d\n",d[b]); } return 0; }
相关文章推荐
- HDU 1548 A strange lift
- hdu 1548 A strange lift
- hdu 1548-A strange lift-最短路-dijkstra
- HDU--杭电--1548--A strange lift--最短路
- hdu 1548 A strange lift (BFS、Dijkstra)
- HDU 1548 A strange lift (最短路/Dijkstra)
- HDU 1548 A strange lift 奇怪的电梯(BFS,水)
- hdu 1548 a strange lift
- 浅析BFS——HDU 1548 A Strange lift
- HDU 1548:A strange lift(BFS)
- hdu 1548 A strange lift (BFS)
- HDU 1548 AStrangeLift
- hdu 1548 A strange lift(BFS)
- A strange lift HDU - 1548
- HDU 1548 A strange lift
- HDU 1548 A strange lift
- HDU-1548 A strange lift(单源最短路 或 BFS)
- hdu 1548 A strange lift
- hdu 1548 A strange lift(bfs)
- A strange lift HDU 1548 queue BFS 简单 水题