c_cpp Dijkstra的邻接矩阵表示算法

Posted

tags:

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

//https://www.geeksforgeeks.org/dijkstras-shortest-path-algorithm-greedy-algo-7/
#include<iostream>
using namespace std;
#define v 9

int minDist (int dist[], bool spset[]) {
    int minIndex, min=INT_MAX;
    for (int i=0; i<v; i++)
        if (spset[i]== 0 && dist[i]<= min)
            min=dist[i],minIndex= i;
    return minIndex;
}
void dijkstra (int graph[][v], int s) {
    bool spset[v]= {0};
    int dist[v];
    for (int i=0; i<v;i++)
        dist[i]= INT_MAX;
    dist[s]= 0;

    for (int c=0; c<v-1; c++) {
        int u= minDist(dist, spset);

        spset[u]= 1;
        for (int i=0;i<v; i++)
            if (!spset[i] && graph[u][i]!=0 && dist[u]!= INT_MAX && dist[i]>dist[u]+graph[u][i])
                dist[i]= dist[u]+graph[u][i];
    }
    for (int i=0;i<v;i++)
        (dist[i]==INT_MAX)?cout<<i<< "\tInf\n":cout<<i<< "\t"<< dist[i]<<"\n";

}

int main() {
    int graph[v][v] = {{0, 4, 0, 0, 0, 0, 0, 8, 0},
                      {4, 0, 8, 0, 0, 0, 0, 11, 0},
                      {0, 8, 0, 7, 0, 4, 0, 0, 2},
                      {0, 0, 7, 0, 9, 14, 0, 0, 0},
                      {0, 0, 0, 9, 0, 10, 0, 0, 0},
                      {0, 0, 4, 14, 10, 0, 2, 0, 0},
                      {0, 0, 0, 0, 0, 2, 0, 1, 6},
                      {8, 11, 0, 0, 0, 0, 1, 0, 7},
                      {0, 0, 2, 0, 0, 0, 6, 7, 0}
                     };

    dijkstra(graph, 0);
}

以上是关于c_cpp Dijkstra的邻接矩阵表示算法的主要内容,如果未能解决你的问题,请参考以下文章

邻接矩阵中的 Dijkstra 算法

最短路径(邻接矩阵)-Dijkstra算法

Dijkstra 算法不起作用(邻接矩阵)

基于邻接矩阵的Dijkstra算法——C++实现

算法Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现

最短路求两点间最短路径的改进的Dijkstra算法及其matlab实现