该怎么改才能记录路径啊,感觉哪里都不是很合适,要用二维数组吗?感觉套在了那个循环里面
#include<stdio.h>
#define max 50
#define M 999
void DJ(int G[max][max],int n,int m,int v,int visit[]);
int main()
{
int G[max][max];//图
int n,m,v;//定点数、边数、初始点
int visit[max];
int i,j,x,y,w;
printf("输入顶点数和边数:\n");
scanf("%d,%d",&n,&m);
//初始化
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j)
{
G[i][j]=0;
}
else
{
G[i][j]=M;
}
}
}
printf("输入顶点和全值\n");
for(i=1;i<=m;i++){
scanf("%d,%d,%d",&x,&y,&w);
G[x][y]=w;
}
printf("输入初始点");
scanf("%d",&v);
DJ(G,n,m,v,visit);
}
void DJ(int G[max][max],int n,int m,int v,int visit[])
{
int dist[max];//用于存放路径长度
int i,j,min,u;
for(i=0;i<n;i++)
{
visit[i]=0;
}
visit[v]=1;
for(i=0;i<n;i++)
{
dist[i]=G[v][i];
}
//选择一个到v边长最小的边
for(j=0;j<n-1;j++)
{
min=M;
for(i=0;i<n;i++)
{
if(!visit[i]&&min>dist[i])
{
min=dist[i];
u=i;
}
}
visit[u]=1;
for(i=0;i<n;i++)
{
if(dist[i]>dist[u]+G[u][i])
{
dist[i]=dist[u]+G[u][i];
}
}
}
for(i=0;i<n;i++)
{
printf("%d->%d的距离为:%d\n",v,i,dist[i]);
}
}