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实现