2

ソースと宛先の間の複数のパスを見つけるアルゴリズムのコードを書いています。後でインターレースパスを削除するために、すべての反復で変更されたダイクストラから取得したパスを保存するための最良の方法はどれですか?宛先からソースに到達するまで、previousという名前のベクトルからパスを取得します。マトリックスはすべてのパスで機​​能するとは限りません。

int l[SDIM][SDIM];
int d[SDIM], s[SDIM], p[SDIM];
int i,j,a,z,prev,minD,minJ,count;
for (i=0;i<SDIM;i++)
{
    d[i]=l[a][i];
    s[i]=1;
    p[i]=a;
}
s[a] = 0;
prev=a;
do
{
    minD=MAX;
    for (j=0;j<SDIM;j++)
    {
        if ((s[j]==1) && (d[j]<minD))
        {
            minD=d[j];
            minJ=j;
        }
    }
    s[minJ] = 0;
    prev=minJ;
    if (prev==z) break;
    for (i=0;i<SDIM;i++)
    {
        if ((l[prev][i]!=MAX) && (d[i]>(d[prev]+l[prev][i])))
        {
            d[i]=d[prev]+l[prev][i];
            p[i]=prev;
            s[i]=1;
        }
    }
}while(1);
4

0 に答える 0