Dijkstra(狄克斯特拉)演算法求單源最短通路
阿新 • • 發佈:2019-01-08
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;
}
}
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;
}
}