2012-06-10 73 views
0

我想實現弗洛伊德的算法。我認爲我的代碼存在問題,我無法弄清楚。輸出是不同的,他們只是缺少一些小的東西。在我的代碼中,我還包括一個輸入,輸出和原始輸出。我會很感激任何小小的幫助。C編程語言,弗洛伊德算法

#include<stdio.h> 
#define maxVertices 12 
#define INF 55 
int min(int a,int b){ 
    return (a<b)?a:b; 
} 
void init(int distance[maxVertices][maxVertices]){ 
    int iter,jter; 
    for(iter=0;iter<maxVertices;iter++){ 
      for(jter=0;jter<maxVertices;jter++){ 
        if(iter==jter){ 
          distance[iter][jter] = 0; 
        } 
        else{ 
          distance[iter][jter] = INF; 
        } 
      } 
    }} 
void FloydWarshall(int distance[maxVertices][maxVertices],int vertices){ 
int k,i,j; 
      for(k=0;k<vertices;k++){ 
      for(i=0;i<vertices;i++){ 
        for(j=0;j<vertices;j++){ 
         if(distance[i][j] > distance[i][k] + distance[k][j]) 
      distance[i][j] = distance[i][k] + distance[k][j]; 
        } 
      } 
    } 
} 

int main(){ 
int i,j;  
    int graph[maxVertices][maxVertices]; 
    int distance[maxVertices][maxVertices]; 
    int vertices,edges,iter,jter; 
    /* vertices represent number of vertices in the graph. */ 
     scanf("%d",&vertices); 
    /*initialize distance between all pairs as infinity*/ 
     init(distance); 
    int vertex1,vertex2,weight; 
    /* Here graph[i][j] represent the weight of edge joining i and j */ 
    for(iter=0;iter<11;iter++) 
    { 
      scanf("%d%d%d", &vertex1, &vertex2, &weight); 
      graph[vertex1][vertex2] = weight; 
      distance[vertex1][vertex2] = weight; 
    } 
    FloydWarshall(distance,vertices); 
    return 0;} 
    /* 
8      MY INPUT 
1 2 6 
2 1 6 
1 6 10 
2 6 3 
3 2 8 
4 5 9 
5 4 9 
5 7 7 
6 1 10 
6 2 3 
7 5 7 

0 1 2 3 4 5 6 7 MY OUTPUT 
0-0 55 55 55 55 55 55 55  
1-55 0 6 55 55 55 9 55 
2-55 6 0 55 55 55 3 55 
3-55 14 8 0 55 55 11 55 
4-55 55 55 55 0 9 55 16   
5-55 55 55 55 9 0 55 7 
6-55 9 3 55 55 55 0 55 
7-55 55 55 55 16 7 55 0 

************************ 
    0 1 2 3 4 5 6 7  THE ORIGINAL OUTPUT 
0-0 55 55 55 55 55 55 55 
1-55 0 6 14 55 55 9 55 
2-55 6 0 8 55 55 3 55 
3-55 14 8 0 55 55 11 55  
4-55 55 55 55 0 9 55 16 
5-55 55 55 55 9 0 55 7 
6-55 9 3 11 55 55 0 55 
7-55 55 55 55 16 7 55 0 

*/

+2

歡迎堆棧溢出是對稱的!要求陌生人通過檢查發現代碼中的錯誤並不是富有成效的。您應該使用調試器或打印語句來識別(或至少隔離)問題,然後回來一個更具體的問題(一旦您將其縮小到10行[測試案例](http:///sscce.org))。 –

+0

現在我認爲不可能更好 – bledi

+1

@bledi:但你仍然不知道你的錯誤在哪裏... –

回答

2

我認爲你缺少你的輸入數據2 3 8。 或者,你可以強制權重加入

distance[vertex2][vertex1] = weight; 

distance[vertex1][vertex2] = weight; 
+0

我確認你的懷疑。我自己的回答錯過了這個觀點:) –

+0

謝謝你。你真的幫了我很多 – bledi