void ShortestDist( MGraph Graph, int dist[], Vertex S ){
int n=Graph->Nv;
for(int i=0;i<n;i++){
dist[i]=Graph->G[S][i];
}
int vis[MaxVertexNum]={0};
vis[S]=1;
dist[S]=0;
int min,v;
for(int i=0;i<n;i++){
min=INFINITY;
v=-1;
for(int j=0;j<n;j++){
if(vis[j]==0&&dist[j]<min){
v=j;
min=dist[j];
}
}
if(v==-1) //源点S与v点不连通,则跳到下一个点,否则调整未选择点集合中的路径长度
continue;
vis[v]=1;
for(int j=0;j<n;j++){
if(vis[j]==0&&((dist[v]+Graph->G[v][j])<dist[j])){
dist[j]=dist[v]+Graph->G[v][j];
}
}
}
for(int i=0;i<n;i++){
if(dist[i]==INFINITY)
dist[i]=-1;
}
}
6-12 Shortest Path [2] (25 分)【单元最短路径 - 迪杰斯特拉】
最新推荐文章于 2022-03-22 16:42:13 发布
这段代码实现的是Dijkstra算法,用于找到给定图中源点S到所有其他顶点的最短路径。它通过维护一个未访问顶点集合,并逐步更新最短距离,直到遍历完整个图。算法首先初始化所有顶点的距离为无穷大,源点S的距离为0,然后不断寻找当前未访问顶点中距离最小的一个,更新其相邻顶点的距离。
摘要由CSDN通过智能技术生成