首页 > 代码库 > hdu 1548 A strange lift (dijkstra算法)
hdu 1548 A strange lift (dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548
题目大意:升降电梯,先给出n层楼,然后给出起始的位置,即使输出从A楼道B楼的最短时间。
注意的几点
(1)每次按一下,只能表示上或者是下,然后根据输入的看是上几层或者是下几层。
(2)注意不能到底不存在的楼层。
详见代码。
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int INF=9999999; 5 int map[205][205],node[205],vis[205],Min,n; 6 7 void set() 8 { 9 for (int i=1; i<=n; i++)10 {11 vis[i]=0;12 node[i]=INF;13 for (int j=1; j<=n; j++)14 map[i][j]=INF;15 }16 }17 18 int dijkstra(int m,int end)19 {20 int tm=m;21 vis[m]=1;22 node[m]=0;23 for (int k=2; k<=n; k++)24 {25 Min=INF;26 for (int i=1; i<=n; i++)27 if (!vis[i])28 {29 if (node[i]>node[tm]+map[tm][i])30 node[i]=node[tm]+map[tm][i];31 if (Min>node[i])32 {33 Min=node[i];34 m=i;35 }36 }37 vis[m]=1;38 tm=m;39 if(vis[end])40 return node[end];41 }42 return -1;43 }44 45 int main ()46 {47 int k;48 while (scanf("%d",&n),n)49 {50 set();51 int a,b;52 scanf("%d%d",&a,&b);53 for (int i=1; i<=n; i++)54 {55 scanf("%d",&k);56 if (i+k<=n)57 map[i][i+k]=1;58 if (i-k>=1)59 map[i][i-k]=1;60 }61 printf ("%d\n",dijkstra(a,b));62 }63 return 0;64 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。