一、迪杰斯特拉算法(Dijkstra算法)
(1)算法
从某一顶点到其余各项顶点的最短路径。
引进三个辅助数组dist[]、path[]和set[]。
dist[vi]表示当前已找到的从v0到vi的最短路径长度。
path[vi]中保存从v0到vi最短路径上vi的前一个顶点。
set[]为标记数组。
/*邻接矩阵的结构定义*/
#define maxSize 100
typedef struct{
int edges[maxSize][maxSize]; //邻接矩阵定义
int n, e; //分别为顶点数和边数
}MGraph;
/*最短路径,迪杰斯特拉算法(Dijkstra算法),从某一顶点到其余各项顶点的最短路径*/
void Dijkstra(MGraph g, int v0, int dist[], int path[]){
int set[maxSize]; //标记数组
int i, j, min, v;
/*对各数组进行初始化*/
for(i=0;i<g.n;i++){
dist[i]=g.edges[v0][i];
set[i]=0;
if(g.edges[v0][i]<INF)
path[i]=v0;
else
path[i]=-1;
}
set[v0]=1;
path[v0]=-1;
/*初始化结束*/
/*关键操作开始*/
for(i=0;i<g.n-1;i++){
min=INF;
/*这个循环每次从剩余顶点中选出一个顶点,通往这个顶点的路径在通往所有剩余顶点的路径中是长度最短的*/
for(j=0;j<g.n;j++){
if(set[j]==0&&dist[j]<