zoukankan      html  css  js  c++  java
  • HDU_1548 A strange lift(最短路 Dijkstra解法)

    把与某个楼成相连的上下楼层为边建立一个图,边的权值为1.

    如:3 3 1 2 5

    可建成图:

    map[1][4] = 1;

    map[2][5] = 1;

    map[3][2] = 1;

    map[3][4] = 1;

    map[4][2] = 1;

    然后用最短路经的解法Floyd, Bellman_Ford, SPFA, Dijkstra...

    这里用的是Dijkstra解法

    My Code:

    #include <iostream>
    #include
    <cstring>
    #include
    <cstdio>
    using namespace std;

    const int inf = 10000000;
    const int N = 207;

    int map[N][N];
    int dis[N], vis[N];
    int n;
    void Dijkstra(int v)
    {
    int i, j;
    memset(vis,
    0, sizeof(vis)); //这里是个陷阱,记得要memset(vis, 0, sizeof(vis));,在这里查bug查了好一会!
    for(i = 1; i <= n; i++)
    {
    dis[i]
    = map[v][i];
    //printf("%d ", map[v][i]);
    }
    dis[v]
    = 0;
    vis[v]
    = 1;
    for(i = 2; i <= n; i++)
    {
    int flag = v, min = inf;
    for(j = 1; j <= n; j++)
    if(!vis[j] && dis[j] < min)
    {
    flag
    = j;
    min
    = dis[j];
    }
    vis[flag]
    = 1;
    for(j = 1; j <= n; j++)
    {
    if(!vis[j] && map[flag][j] < inf)
    {
    int newdis = dis[flag] + map[flag][j];
    if(newdis < dis[j])
    dis[j]
    = newdis;
    }
    }
    }
    }

    int main()
    {
    //freopen("data.in", "r", stdin);
    int v, u, x;
    while(scanf("%d", &n), n)
    {
    scanf(
    "%d%d", &v, &u);
    int i, j;
    for(i = 1; i <= n; i++)
    for(j = 1; j <= n; j++)
    map[i][j]
    = inf;
    for(i = 1; i <= n; i++)
    {
    scanf(
    "%d", &x);
    if(i+x <= n)
    map[i][i
    +x] = 1;
    if(i-x >= 1)
    map[i][i
    -x] = 1;
    }
    /*for(i = 1; i <= n; i++)
    {
    for(j = 1; j <= n; j++)
    printf("%10d", map[i][j]);
    printf("\n");
    }
    */
    Dijkstra(v);
    /*for(i = 1; i <= n; i++)
    printf("%d ", dis[i]);
    printf("\n");
    */
    if(dis[u] < inf)
    printf(
    "%d\n", dis[u]);
    else
    printf(
    "-1\n");
    }
    return 0;
    }


    VonGang原创,转载请注明:http://www.cnblogs.com/vongang/http://www.cnblogs.com/vongang/


  • 相关阅读:
    pytorch的常用接口、操作、注意事项
    pytorch 中conv1d操作
    NLP基本知识点和模型
    深度学习基础理论知识
    对交叉验证的理解
    阅读深度学习论文的一些技巧
    机器学习和深度学习入门总结
    架构思考-业务快速增长时的容量问题
    系统梳理一下锁
    稳定性五件套-限流的原理和实现
  • 原文地址:https://www.cnblogs.com/vongang/p/2141509.html
Copyright © 2011-2022 走看看