2011-12-05 9 views
0

私はこれを何時間も働いており、非常に不満です。私は何が間違っているのか分かりません。

私はDijkstraのアルゴリズムを使用して、隣接行列を使用して、ソース頂点と4つの他の頂点との間の最短経路を見つけます。この背後にあるアイデアは、5つの都市と飛行機がそこを行き来しているということです。私は、遅れを考慮して、最も安い航空券の価格を見つける必要があります。

私の本の中の擬似コードであるアルゴリズムと、次のWebサイトのコードに従っています:http://vinodcse.wordpress.com/2006/05/19/code-for-dijkstras-algorithm-in-c-2/

問題は私がウェブサイトの入れ子にされたforループ私は1から始まり、私は、これはすべての頂点にソース頂点からの距離が正確である理由であると信じて、999私のdijkstrasアルゴリズムに問題があります

例で変更されていない最初のものを除い:

現在の距離:999 220 0 115 130

先行操作:0 3 0 2 2

元の頂点を変更しても、それらの距離はすべて正しいですが、最初のものは変更されません。

私は、カウンタ0を変更すると、それはすべての距離を台無しに、すなわち

現在の距離:とにかく0 105 0 0 0

、助けてください。ここに関連コードがあります。これは

if(adjecencyMatrix[v][i]>0) 

は比較の残りの部分のように、adjecencyMatrix[v][i][0].ticketPriceで行うこと

void Graph::findDistance(int startingVertex) 
{ 
    for(int i=0; i<MAX;i++) 
    { 
    currentDistance[i] = 999; 
    toBeChecked[i] = 1; 
    predecessor[i] = 0; 
    } 

    currentDistance[startingVertex]=0; 
    bool flag=true; 
    int v; 
    while(flag) 
    { 
    v=minimum(); 

    toBeChecked[v]=0; 

    for(int i=1; i<MAX;i++) //here is where i think im going wrong 
    { 
     if(adjecencyMatrix[v][i]>0) 
     { 
     if(toBeChecked[i]!=0) 
     { 
      if(currentDistance[i] > currentDistance[v]+adjecencyMatrix[v][i][0].ticketPrice) 
      { 
      currentDistance[i] = currentDistance[v]+adjecencyMatrix[v][i][0].ticketPrice; 
      predecessor[i]=v; 
      } 
     } 
     } 
    } 

    flag = false; 
    for(int i=1; i<MAX;i++) 
    { 
     if(toBeChecked[i]==1) 
     flag=true; 
    } 
    } 
} 

int Graph::minimum() 
{ 
    int min=999; 
    int i,t; 
    for(i=0;i<MAX;i++) 
    { 
    if(toBeChecked[i]!=0) 
    { 
     if(min>=currentDistance[i]) 
     { 
     min=currentDistance[i]; 
     t=i; 
     } 
    } 
    } 
    return t; 
} 
+0

あなたの隣接行列をチェックしてください。頂点0は実際に他のものに接続されていますか? –

+0

はい、私は隣接行列をプリントアウトしています。これは私たちの教授が私たちに(そしてデータと)照合してくれた行列と一致しています。 –

+1

私は彼が正しいと確信しており、その問題はデータやアルゴリズムの転写にあります。彼を信じなさい! – mozillanerd

答えて

1

をチェックべきではないでしょうか。 adjecencyMatrix[v][i]が配列である場合

、それはポインタに変換取得され、そのポインタが常に再び0より大きいアレイ・ツー・ポインタ崩壊ストライキを比較します:)

+0

もう一度ありがとう!そんなに感謝する –

関連する問題