私はこれを何時間も働いており、非常に不満です。私は何が間違っているのか分かりません。
私は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は実際に他のものに接続されていますか? –
はい、私は隣接行列をプリントアウトしています。これは私たちの教授が私たちに(そしてデータと)照合してくれた行列と一致しています。 –
私は彼が正しいと確信しており、その問題はデータやアルゴリズムの転写にあります。彼を信じなさい! – mozillanerd