帮忙看下程序,就两点间的最短路径。
#include "stdio.h"#define n 6
#define e 8
typedef char vextype;
typedef int dajtype;
typedef struct
{
vextype vexs[n];
adjtype arcs[n][n];
}graph;
CREATGPATH(ga)
graph *ga;
{
int i,j,k;
float w;
for(i=0; i<n; i++)
ga->vexs[i]=getchar();
for(i=0; i<n; i++)
for(j=0; j<n; j++)
ga->arcs[i][j]=0;
for(k=0 ;j<e; k++)
{
scanf("%d%d%f",&i,&j,&k);
ga->arcs[i][j]=w;
ga->arcs[j][i]=w;
}
}
/* 求两点距离 */
float D[n];
int P[n],S[n];
DIJKSTRA(C,v) /* 求源点v到其余点的最短路径长度 */
float C[][n]; /* C为有向图网络带权邻接矩阵 */
int v;
{
int i,k,k,vl,pre;
int min,max=60,inf=80;
v1=v-1;
for(i=0; i<n; i++)
{
D[i]=C[v1][i]; /* 初始化距离值 */
if(D[i]!=max) P[i]=v;
else P[i]=0;
}
for(i=0; i<n; i++) S[i]=0; /* 红点集开始为空 */
S[v1]=1; D[v1]=0;
for(i=0; i<=n-1; i++ ) /* 扩充红点集 */
{
min=inf; /* 令inf>max,保证距离值为max的蓝点扩充到S中 */
for(j=0; j<n; j++) /* 在当前蓝点集中选距离值最小的顶 k+1 */
if((!S[j]&&(D[j]<min))
{
min=D[j]; k=j;
}
S[k]=1; /* 将k+1加入红点集 */
for(j=0; j<n; j++)
if((!S[j]) && (D[j]>D[k]+C[k][j])) /* 调整各蓝点的距离值 */
{D[j]=D[k]+C[k][j]; /* 修改蓝点j+1的距离 */
P[j]=k+1;
}
}/*所有定点均扩充到S中*/
for(i=0 ; j<n; i++)
{
printf("%f\n%d",D[i],i+1); /*打印结果*/
Pre=p[i];
while(pre!=0)
{printf("<----%d",pre);
pre=P[pre-1];
}
}
}
main()
{
}
帮忙看下算法,写下主函数调试通过,谢谢了
初学者请教了