1. dijkstra算法
总体思路是使用一个距离数组来存储到源点的最小距离,每次找到距离数组中最小的那个点对应的距离和点,遍历这个点的邻接点,如果用这个点做跳板,距离更小的话,更新邻接点对应的距离数组。
int * dijkstra(int s, ALGraph & graph){
for(int i=0;i<graph.vexNum;i++){
visited[i]=-1;
}
int distance[graph.vexNum];
fill(distance.begin(),distance.end(),INF);
distance[s]=0;
for(int i=0;i<graph.vexNum;i++){
int u=-1;
int min=INF;
for(int j=0;j<graph.vexNum;j++){
if(visited[j]==-1 && min>distance[j]){
u=j;
min=distance[j];
}
}
if(u==-1){
break;
}
visited[u]=1;
ArcNode * firstarc=graph.adjList[u].firstarc;
while(firstarc){
int v =firstarc->adjvex;
if(distance[v]>distance[u]+firstarc->weight){
distance[v]=distance[u]+firstarc->weight;
}
firstarc=firstarc->next;
}
}
return distance;</