LQ0151 最短路Dijkstra算法

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0151 最短路Dijkstra算法相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2019初赛 C++ G组H题

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

问题分析
最短路的模板题,用Dijkstra算法来解决,套模板就可以了。

AC的C++语言程序如下:

/* LQ0151 最短路 */

#include <iostream>
#include <cstring>

using namespace std;

const int M = 37;
struct Edge 
    char u, v;
    int w;
 e[] = 
    'A','B',2,
    'A','C',1,
    'A','D',1,
    'A','E',1,
    'B','J',2,
    'B','G',1,
    'C','D',3,
    'C','F',3,
    'C','G',3,
    'D','E',1,
    'D','G',2,
    'D','H',1,
    'D','I',2,
    'E','H',1,
    'E','I',3,
    'F','G',1,
    'F','J',1,
    'G','F',1,
    'G','I',3,
    'G','K',2,
    'H','I',1,
    'H','L',2,
    'I','M',3,
    'J','S',2,
    'K','N',1,
    'K','L',3,
    'K','P',2,
    'L','M',1,
    'L','R',1,
    'M','N',2,
    'M','Q',1,
    'M','S',1,
    'N','P',1,
    'O','P',1,
    'O','Q',1,
    'O','R',3,
    'R','S',1,
;

/* Dijkstra算法
 * 复杂度:O(N×N)
 * 输入:n 全局变量,图结点数
 *      g 全局变量,邻接矩阵,g[i][j]表示结点i到j间的边距离
 * 输出:dis 全局变量,dis[i]表示结点1到i的最短距离
 */
const int INF = 0x3f3f3f3f;
const int N = 19;
int dis[N + 1], g[N + 1][N + 1], n, vis[N + 1];

void dijkstra()

    memset(dis, INF, sizeof dis);
    memset(vis, 0, sizeof vis);

    dis[1] = 0;
    for(int i = 1; i <= n; i++) 
        int mark = -1, mindis = INF;
        for(int j = 1; j <= n; j++)
            if(!vis[j] && dis[j] < mindis)
                mindis = dis[j], mark = j;
        vis[mark] = 1;
        for(int j = 1; j <= n; j++)
            if(!vis[j])
                dis[j] = min(dis[j], dis[mark] + g[mark][j]);
    


void addEdge(char a, char b, int w)

    int u = a - 'A' + 1;
    int v = b - 'A' + 1;
    g[u][v] = g[v][u] = w;


int main()

    n = N;

    memset(g, INF, sizeof g);
    for(int i = 0; i <= n; i++)
        g[i][i] = 0;

    for (int i = 0; i < M; i++)
        addEdge(e[i].u, e[i].v, e[i].w);

    dijkstra();

    cout << dis[n] << endl;

    return 0;

以上是关于LQ0151 最短路Dijkstra算法的主要内容,如果未能解决你的问题,请参考以下文章

最短路径(Dijkstra算法)

最短路径 深入浅出Dijkstra算法(一)

Dijkstra算法

最短路径算法(Dijkstra)

图-最短路径-Dijkstra及其变种

最短路径 Dijkstra 算法为啥边上的权值非负阿?