码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1548 升降梯

时间:2015-06-18 23:47:36      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:有一个升降机,它有两个按钮UP和DOWN,给你一些数i表示层数,并且每层对应的Ki,如果按UP按钮,会从第i层升到第i+Ki层;如果按了DOWN则会从第i层降到第i-Ki层;并规定能到的层数为1到N,现在的要求就是给你N,A,B和一串数K1到Kn,问你从A到B,至少按几下按钮。

构造一个图,边的权值为1

Sample Input
5 1 5 //层数 起点 终点
3 3 1 2 5
0

Sample Output
3

 

Dijkstra:

技术分享
 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <cmath>
 6 # define LL long long
 7 using namespace std ;
 8 
 9 const int MAXN=300;
10 const int INF=0x3f3f3f3f;
11 int n ;
12 bool vis[MAXN];
13 int cost[MAXN][MAXN] ;
14 int lowcost[MAXN] ;
15 int pre[MAXN];
16 void Dijkstra(int beg)
17 {
18     for(int i=0;i<n;i++)
19     {
20         lowcost[i]=INF;vis[i]=false;pre[i]=-1;
21     }
22     lowcost[beg]=0;
23     for(int j=0;j<n;j++)
24     {
25         int k=-1;
26         int Min=INF;
27         for(int i=0;i<n;i++)
28             if(!vis[i]&&lowcost[i]<Min)
29             {
30                 Min=lowcost[i];
31                 k=i;
32             }
33             if(k==-1)
34                 break ;
35             vis[k]=true;
36             for(int i=0;i<n;i++)
37                 if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i])
38                 {
39                     lowcost[i]=lowcost[k]+cost[k][i];
40                         pre[i]=k;
41                 }
42     }
43 
44 }
45 
46 
47 
48 int main ()
49 {
50    // freopen("in.txt","r",stdin) ;
51 
52     while (scanf("%d" , &n ) !=EOF)
53     {
54         if (n==0)
55             break ;
56         int i , j ;
57         for (i = 0 ; i < n ; i++)
58             for (j = 0 ; j < n ; j++)
59                cost[i][j] = INF ;
60         int s , e , t;
61         scanf("%d %d" , &s , &e) ;
62         for (i = 0 ; i < n ; i++)
63         {
64             scanf("%d" , &t) ;
65             if (i + t <= n-1)
66                 cost[i][i+t] = 1 ;
67             if (i - t >= 0)
68                 cost[i][i-t] = 1 ;
69         }
70         Dijkstra(s-1) ;
71         if (lowcost[e-1] != INF)
72             printf("%d\n" , lowcost[e-1]) ;
73         else
74             printf("-1\n") ;
75     }
76 
77     return 0 ;
78 }
View Code

 

hdu 1548 升降梯

标签:

原文地址:http://www.cnblogs.com/-Buff-/p/4587102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!