Dijkstra算法



void Dijkstra(MGraph g,int v)
 {
   int dist[MAXV],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;               //s[]置空 
     if(g.edges[v][i]<INF) //路径初始化 
       path[i]=v;          //顶点v到顶点i有边时,置顶点i的前一个顶点为v 
     else
       path[i]=-1;         //顶点v到顶点i没边时,置顶点i的前一个顶点为-1      
   }
   s[v]=1;path[v]=0;       //源点编号v放入s中 
   for(i=0;i<g.n;i++)      //循环直到所有顶点的最短路径都求出 
   {
     mindis=INF;           //minddis置最小长度初值 
     for(j=0;j<g.n;j++)    //选取不在s中且具有最小距离的顶点u 
       if(s[j]==0 && dist[j]<mindis)
       {
         u=j;
         mindis=dist[j];           
       } 
     s[u]=1;               //顶点u加入s中 
     for(j=0;j<g.n;j++)    //修改不在s中的顶点的距离 
       if(s[j]==0)
         if(g.edges[u][j]<INF && dist[u]+g.edges[u][j]<dist[j])
         {
           dist[j]=dist[u]+g.edges[u][j];
           path[j]=u;                     
         }                 
   } 
   Dispath(g,dist,path,s,v); //输出最短路径 
 }