首页 > 代码库 > 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 }