```c
//---最短路径之Dijkstra算法:从某个源点到其余各顶点的最短路径---
//1.选择集合V-S中距离集合S中点最近的点,加入集合S,
//2.再通过新加入的点更新从集合S中的点到集合V-S中的点的距离。
//P[i]=w表示从源点到点i的最短路径须先从源点到w点,再通过P[w]往前推,即可算出从源点到i点的最短路径经过的所有点
#include <stdio.h>
#include <stdlib.h>
#include "AdjMatrix.h"
typedef enum{FALSE,TRUE}Boolean;
void ShortestPath_DIJ(MGraph G,int v0,int *P,int *D);
void DisplayShortestPath(MGraph G,int v0,int *P,int *D);
int main()
{
MGraph G;
CreateGraph(&G);
int *P,*D;
P=(int *)malloc(sizeof(int)*G.vexnum);
D=(int *)malloc(sizeof(int)*G.vexnum);
int v0;
printf("\n输入源头点---(输入负数退出):");
scanf("%d",&v0);
while(v0>=0)
{
if(v0>=G.vexnum)
printf("\n超出最大源头点。");
else
{
ShortestPath_DIJ(G,v0,P,D);
DisplayShortestPath(G,v0,P,D);
}
printf("\n输入源头点---(输入负
图的最短路径之Dijkstra算法
最新推荐文章于 2022-02-07 16:44:11 发布