zoukankan      html  css  js  c++  java
  • HDU 1548 A strange lift (Dijkstra)

    https://vjudge.net/problem/HDU-1548

    题意:

    电梯每层有一个不同的数字,例如第n层有个数字k,那么这一层只能上k层或下k层,但是不能低于一层或高于n层,给定起点与终点,要求出最少要按几次键。

    思路:

    可以用BFS,也可以用迪杰斯特拉算法。

     1 #include<iostream> 
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<vector>
     5 using namespace std;
     6 
     7 #define INF 100000000
     8 
     9 int n, A, B;
    10 int map[205][205];
    11 int vis[205];
    12 int d[205];
    13 int num[205];
    14 
    15 void Dijkstra()
    16 {
    17     memset(vis, 0, sizeof(vis));
    18     for (int i = 1; i <= n; i++)
    19     {
    20         num[i] = map[A][i];
    21     }
    22     num[A] = 0;
    23     vis[A] = 1;
    24     for (int i = 1; i < n; i++)
    25     {
    26         int min = INF;
    27         int pos;
    28         for (int j = 1; j <= n; j++)
    29         {
    30             if (num[j] < min && !vis[j])
    31             {
    32                 pos = j;
    33                 min = num[j];
    34             }
    35         }
    36         if (min == INF)    break;
    37         vis[pos] = 1;
    38         for (int j = 1; j <= n; j++)
    39         {
    40             if (num[pos] + map[pos][j] < num[j] && !vis[j])
    41                 num[j] = num[pos] + map[pos][j];
    42         }
    43     }
    44     if (num[B] == INF)  printf("-1
    ");
    45     else printf("%d
    ", num[B]);
    46 }
    47 
    48 int main()
    49 {
    50     //freopen("D:\txt.txt", "r", stdin);
    51     int a;
    52     while (scanf("%d", &n) && n)
    53     {
    54         scanf("%d%d", &A, &B);
    55         for (int i = 1; i <= n; i++)
    56         for (int j = 1; j <= n; j++)
    57             map[i][j] = INF;
    58         for (int i = 1; i <= n; i++)
    59         {
    60             scanf("%d", &a);
    61             if (i + a <= n)
    62                 map[i][i + a] = 1;
    63             if (i - a >= 0)
    64                 map[i][i - a] = 1; 
    65         }
    66         Dijkstra();
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    影响Java EE性能的十大问题
    Android APK加壳技术方案【2】
    动态实时跟踪你的java程序
    ASP.NET MVC载入页面常用方法
    JavaWeb禁用浏览器缓存
    JavaWebresponse两个流
    nslookup命令用法
    GDAL交流 QQ群
    事件(二)——Jquery事件模型
    浅谈meta标签
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6388682.html
Copyright © 2011-2022 走看看