用演算法搜索到最短路徑后,會把很多點都放在S中,我該如何把真正要走的路徑所經過的節點標記下來呢?請各位大神幫幫忙!
for(int k=2;k<=30;k++) //去掉s頂點后的其他頂點個數
{
if(!final[d])
{
int min; //當前所知離s頂點的最近距離
min=1000;
for(j=1;j<=30;j++)
{
if(!final[j]) //j頂點在未走過的集合中,既v-s中
if(D[j]<min) //j頂點離S的距離更小
{
i=j;
min=D[j];
}
}
final[i]=true;
path1[k]=i;
for(j=1;j<=30;j++)//更新當前最短路徑及距離
{
if(!final[j]&&(min+weight[i][j])<D[j])//修改D[j]與P[j]
{
D[j]=min+weight[i][j];
p[j] = p[i];
p[j][j]=true;
}
}
}
else
break;
}
int a=1;
for(m=1;m<=k;m++)
if(p[d][path1[m]])
{
path[a++]=path1[m];
}
我用的是最后一個for回圈來限制S中的點,但最終結果顯示路徑時總是多一部分點,請問我應該怎樣刪選S中的點
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/148769.html
