1. 程式人生 > >Dijkstra(狄克斯特拉)演算法求單源最短通路

Dijkstra(狄克斯特拉)演算法求單源最短通路

 typedef enum{FALSE,TRUE}boolean;
typedef int dist[m];
typedef int path[m];
void spath_dij(mgraph g,int v0,path p,dist d)
{boolean final[m];
 int i,k,j,v,min,x;
 for(v=0;v<g.n;v++)
 {final[v]=FALSE;
  d[v]=g.edges[v0][v];
  if(d[v]<FINITY&&d[v]!=0)  p[v]=v0;
  else p[v]=-1;
 }
 final[v0]=TRUE;d[v0]=0;
 for(i=1;i<g.n;i++)
 {min=FINITY;
  for(k=0;k<g.n;++k)
    if(!final[k]&&d[k]<min){v=k;min=d[k];}
    printf("/n%c---%d/n",g.vexs[v],min);
  if(min=FINITY) return;
  final[v]=TRUE;
  for(k=0;k<g.n;++k)
    if(!final[k]&&(min+g.edges[v][k]<d[k]))
    {d[k]=min+g.edges[v][k];
     p[k]=v;
    }
  }