#include <iostream>
using namespace std;
const int maxnum = 100;
const int maxint = 999999;
//Dijkstra(n, 1, dist, prev, c);
void Dijkstra(int n, int v, int *dist, int *prev, int c[maxnum][maxnum])
{
bool s[maxnum]; // 判断是否已存入该点到S集合中
for(int i=1; i<=n; ++i)
{
dist[i] = c[v][i];//别的点到i这个点的距离
s[i] = 0; // 初始都未用过该点
if(dist[i] == maxint)
prev[i] = 0;
else
prev[i] = v;
}
dist[v] = 0;
s[v] = 1;
// 依次将未放入S集合的结点中,取dist[]最小值的结点,放入结合S中
// 一旦S包含了所有V中顶点,dist就记录了从源点到所有其他顶点之间的最短路径长度
for(int i=2; i<=n; ++i)
{
int tmp = maxint;
int u = v;
// 找出当前未使用的点j的dist[j]最小值
for(int j=1; j<=n; ++j)
if((!s[j]) && dist[j]<tmp)
{
u = j; // u保存当前邻接点中距离最小的点的号码 u随之变成没有作为顶点的下标
tmp = dist[j];
}
s[u] = 1; // 表示u点已存入S集合中
//
无向图最短路径dijkstra算法
最新推荐文章于 2025-11-04 23:59:30 发布
本文详细介绍了Dijkstra算法的实现过程,包括初始化、选取未加入集合的点、更新距离和前驱节点等步骤,最终输出源点到每个顶点的最短路径长度及路径。通过输入结点数、路径数和边权重,实现了一种高效的最短路径查找方法。

最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



