dijkstra 求所给点到其他点的最短路径
void graph_dijkstra(Graph *pg,char key){
int pos=get_position(pg,key);
if(pos==-1){
return;
}
int vn=pg->vertexnum;
int i;
int path[vn];//记录点之间的权值
int flag[vn];//记录该点是否遍历过
for(i=0;i<vn;i++){//初始化
path[i]=MAX;(~(1<<31))
flag[i]=0;
}
path[pos]=0;
flag[pos]=-1;//表示遍历过
ENode *node=pg->vertex[pos].enodes;
while(node!=NULL){//记录初始的权值
int epos=get_position(pg,node->date);
path[epos]=node->weight;
node=node->next;
}
int j;
for(i=0;i<vn;i++){
int min=MAX;
int k;
for(j=0;j<vn;j++){//找到点之间最短路径的值,并记录
if(flag[j]==0 && path[j]<min){
min=path[j];
k=j;
}
}
flag[k]=-1;
ENode *node=pg->vertex[k].enodes;
while(node!=NULL){
int epos=get_position(pg,node->date);
if(path[epos]>path[k]+node->weight){
path[epos]=path[k]+node->weight;
}
node=node->next;
}
}
}