2016-12-10 5 views
0

私は他のすべての1つのノードからの最短経路を見つけることができるようにしたいので、私は、私はこのウェブサイトから使用していますが、ウェブサイトhttp://www.geeksforgeeks.org/printing-paths-dijkstras-shortest-path-algorithm/ダイクストラアルゴリズムが動作していない(隣接行列)

からdijkstrasアルゴリズムのコードを使用していますノードと私はまた、パス情報を印刷したい。

パス情報を印刷する機能はこれですが、私が混乱している部分です。

int printSolution(int dist[], int n, int parent[]) 
{ 
    int src = 0; 
    printf("Vertex\t Distance\tPath"); 
    for (int i = 1; i < V; i++) 
    { 
     printf("\n%d -> %d \t\t %d\t\t%d ", src, i, dist[i], src); 
     printPath(parent, i); 
    } 
} 

戻り値の型はint型ですが、何も返さないことを示します。私はintを取って無効にするが、それはうまくいかない。

これは、この機能がvoid戻り値があるとき、私は出力として得るものです:

0 - > 1 -2147483590 0 1

0 - > 2 -2147483582 0 2

0 - >を3 -2147473649 0~3

0 - > 4 -2147473649 0~4

0 - > 5 -2147473649 0~5

0 - > 6 -2147473649 0~6

0 - > 7 -2147473649 0~7

Iは、上記のリンクから正確なコードを使用しています。

私の質問は、作成者が機能しない関数を公開する理由と、それを動作させるために変更する方法です。

+0

ウェブサイトについては忘れてしまいます。これはあなたの問題に役立つかもしれません:http://stackoverflow.com/questions/40875191/shortest-route-modification/40875681#40875681 –

+0

*戻り値の型はintですが、決して何も返しません。何も返さないと宣言されている関数から何も返さない未定義の動作。リンク先のサイトには、貧弱なバグのあるコードが表示され、正しい答えが戻ってくるようなサイトがたくさんあります(コードが悪い場合でも著者は正しい答えを出して賞賛されます)。 – PaulMcKenzie

答えて

0

呼び出しコンテキストを投稿していないため、返されるタイプをintからvoidに変更すると、それが機能しなくなる理由がわかりません。ただし、hereのように、return文を持たない戻り関数をコンパイルすることは可能です。 (しかしそれは良いことではありません)クリエイターがなぜ機能しない機能を公開するのかについては、よく...インターネットにようこそ。

特定の出力に基づいて、問題はコードの他の場所にあるようです。任意のインデックスに対するの値は、Dijikstraのアルゴリズムの負数であってはならないので、の値が設定されている場所を探してください。

+0

ありがとう、私はそれを調べます。 – berrybloxinator

関連する問題