图中顶点间最短路径求解
Dijkstra算法
Floyd算法
Dijkstra算法
1.单源最短路径求解算法,可以求的从某一个源头出发,到所有其他顶点的最短路径。不适合有负权重边的图。
2.简单概括:虚拟两个集合v和u,v集合是已经得到最短路径的顶点集,u是待求最短路径顶点集。创建两个数组dist[]和path[],分别来存储源点到各顶点的最短路径长度和某点最短路径下的前一点。初始化dist和path,选择最小的权重边的另一顶点k加入v集合,刷新dist和path ,如果到某点i的路径长经过k比v直接到该点短,则需要改变dist[i]和让path[i]=k。
3.代码
void Dijkstra(MatGraph g,int v) { int dist[MAXV],int path[MAXV]; int s[MAXV]; int mindis,i,j,u; for(i=0;i<g.n;i++) { dist[i]=g.edges[v][i]; s[i]=0; if(g.edges[v][i]<INF) path[i]=v; else path[i]<