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/


  • 相关阅读:
    我喜欢的电影
    QObject
    python-类
    pycharm活动模板
    pyqt5模块介绍
    第九章第四节 流体压强与流速的关系
    开源的推荐系统
    VNote: 一个舒适的Markdown笔记软件
    jira项目管理平台搭建
    Win10环境下,告别MarkdownPad,用Notepad++搭建编写md文档的环境
  • 原文地址:https://www.cnblogs.com/vongang/p/2141509.html
Copyright © 2011-2022 走看看