本题采用Dijkstra算法,以下简称Dj算法,Dijkstraj算法的可以求出每一个节点距离源节点的最短路径长度。
1.Distance[w]表示从源节点出发,到达w节点的最短路径长度。
2.found[w]数组用来记录已经求得最短路径的节点。若founp[w]=1,则w节点以求得最短路径长度。
3.path[i]数组用来记录i节点的前驱节点,本题未用到path数组,若求得最短路径长度后,想再求最短路径,可以使用path数组。
Dijkstra函数如下
int* dijkstra(GraphMatrix*graphMatrix,int source)
{
int i,j,vex,min;
//found数组用于记录哪些点是新点集合,哪些不是
int* found=(int*)malloc(sizeof(int)*graphMatrix->size);
distance为距离数组,在算法的过程中不断更新,最后结果也放在这里
int *distance=(int*)malloc(sizeof(int)*graphMatrix->size);
int* path=(int*)malloc(sizeof(int)*graphMatrix->size);
for(i=0;i<graphMatrix->size;i++)
{
found[i]=0;path[i]=0;
distance[i]=graphMatrix->graph[source][i];
}
found[source]=1;
distance[source]=0;
for(i=