hdu 1548 A strange lift

点击打开链接hdu 1548

思路:最短路+Dijkstra
分析:数据量不大直接Dijkstra即可,但是注意要把图处理成有向图,因为题目中的电梯是有分上下两个分向的。

代码:


#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 210
#define INF 0xFFFFFFF

int n , A , B;
int value[MAXN][MAXN];
int dis[MAXN];
int vis[MAXN];

void Dijkstra(int s){
    int pos;
    memset(vis , 0 , sizeof(vis));
    for(int i = 1 ; i <= n ; i++)
       dis[i] = INF;
    dis[s] = 0;
    for(int i = 1 ; i <= n ; i++){
       pos = -1;
       for(int j = 1 ; j <= n ; j++){
          if(!vis[j] && (pos == -1 || dis[j] < dis[pos]))
            pos = j;
       }
       vis[pos] = 1;
       for(int j = 1 ; j <= n ; j++){
          if(!vis[j] && dis[j] > dis[pos] + value[pos][j])
            dis[j] = dis[pos] + value[pos][j];
       }
    }
}

int main(){
   int k;
   while(scanf("%d" , &n) &&n){
      scanf("%d%d" , &A , &B);
      for(int i = 1 ; i <= n ; i++){
         for(int j = 1 ; j <= n ; j++)
            value[i][j] = INF;
      }
      for(int i = 1 ; i <= n ; i++){
         scanf("%d" , &k);
         /*处理成有向图*/
         if(i-k >= 1)
           value[i][i-k] = 1;
         if(i+k <= n)
           value[i][i+k] = 1;
      }
      Dijkstra(A);
      if(dis[B] != INF)
        printf("%d\n" , dis[B]);
      else
        printf("-1\n");
   }
   return 0;
}
时间: 2024-10-28 06:19:58

hdu 1548 A strange lift的相关文章

hdu 1548-HDU 1548的问题:A Strange Lift

问题描述 HDU 1548的问题:A Strange Lift HDU 1548"A Strange Lift"(电梯问题).本人刚学bfs和dfs还不会用STL库,就自己写了一个队列.自己测试了很多组数据觉得没有错误,但是提交上去就是Wrong Answer,检查了好多遍也检查不出问题.各位大神帮忙看一下我的代码哪里有错误或者漏洞,谢谢! #include<iostream>#include<cstdio>#include<cstring>usin

HDU1548-A strange lift【广搜做法】

A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11510    Accepted Submission(s): 4362 Problem Description There is a strange lift.The lift can stop can at every floor as you want

hdu1548 A strange lift(bfs 或Dijkstra最短路径)

#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define M 205 #define INF 0x3f3f3f3f using namespace std; int map[M][M]; int d[M], vis[M]; int n; int b, e; void Dijkstra(){ memset(d, 0x3f, sizeof(d)); mems

最短路专题【完结】

第一题 hdu 1317 XYZZY 点击打开hdu 1317 思路: 1 题目的图是一个有向图,并且可能存在环.第一个点的能量值为100,边的权值利用能量大小,例如2点为-60,如果1->2那么value[1][2] = -602 题目明确指出如果是要win的话,那么必须是经过的每条边都要大于0.那么我们只要把那些经过松弛操作后的点大于0的入队即可,小于等于0的点肯定不会出现在最终的路径上.3 如果存在正环的话,那么就有能量值无限大,那么这个时候只要判断这个点能否到达n4 判断是否是有环还是五

HDU 1115 Lifting the Stone:求多边形重心

HDU 1115:http://acm.hdu.edu.cn/showproblem.php?pid=1115 大意:给你个n,有n个点,然后给你n个点的坐标,求这n个点形成的多边形的重心的坐标. 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/ struct point { double x, y; } P[1000010]; struct line { point a, b; } ; double xm

HDU 2923 Einbahnstrasse

链接: http://acm.hdu.edu.cn/showproblem.php?pid=2923 题目: Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1117    Accepted Submission(s): 31 Problem Description Einbahnstra You just started a new

HDU 1690 Bus System

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1690 题目: Bus System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4292    Accepted Submission(s): 1088 Problem Description Because of the huge po

hdu 1527

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1527 hint:威佐夫博弈 基本类似于模板 #include <iostream> #include <cmath> #include <cstdio> using namespace std; const double q = (1 + sqrt(5.0)) / 2.0; // 黄金分割数 int Wythoff(int a, int b) { if (a > b)

hdu 2551 竹青遍野

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2551 hint:就是读懂题就行了 #include <iostream> #include <cstdio> using namespace std; typedef long long LL; LL data[1005]; int main() { data[0]=0; for(int i=1; i<1005; i++) data[i]+=data[i-1]+i*i*i; LL