问一个数据结构的问题, 图的最短路径
图的最短路径,用Dijcstra算法求的是顶点V0到其它n-1个顶点的最短路径的长度
我想把它改成求vi 到 vj 的最短路径.并记录所走路径的顶点序列.
弄了一天了也没做出来.
相关代码如下,老鸟帮偶看看吧.图是用邻接矩阵存储的.
void shortpath(float **G,int vi,int vj,int *dist,int **path)
//求v到其它每个顶点的最短路径,dist记录最短路径长度,path记录顶点序列.
{
int i,j,wm,u,num=1;
int *S = new int [n];
for(i=0;i<n;i++)
{
dist[i]=G[vi][i];
S[i]=0; //数组dist及集合S赋初值
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
path[i][j]=-1;
S[vi] = 1; //把顶点v加入集合S中
int s = 0;
path[vj][s]=vi;
do {
wm = MAX;
u = vi;
for(i = 0;i < n;i++)
{
if (S[i] == 0)
if (dist[i]<wm)
{
u = i;
wm = dist[i];
}
}//for
S[u] = 1;
for(i = 0;i<n;i++) //修改所有不属于S中的顶点i的dist[i]的值
{ if (S[i]==0)
if (dist[u] + G[u][i]<dist[i])
{
dist[i] = dist[u]+G[u][i];
s++;
path[i][s]=u;
}
}//for
num++;
} while(num != n-1);
cout<<endl;
for(i=0;i<n;i++)
{
cout<<S[i]<<" ";
}
cout<<endl;
for(i=0;i<n;i++)
{
if(path[vj][i]!=-1)
cout<<path[vj][i]<<" ";
}
cout<<endl;
cout<<dist[vj];
cout<<endl;
}//end of shortpath;