我想實現弗洛伊德的算法。我認爲我的代碼存在問題,我無法弄清楚。輸出是不同的,他們只是缺少一些小的東西。在我的代碼中,我還包括一個輸入,輸出和原始輸出。我會很感激任何小小的幫助。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
*/
歡迎堆棧溢出是對稱的!要求陌生人通過檢查發現代碼中的錯誤並不是富有成效的。您應該使用調試器或打印語句來識別(或至少隔離)問題,然後回來一個更具體的問題(一旦您將其縮小到10行[測試案例](http:///sscce.org))。 –
現在我認爲不可能更好 – bledi
@bledi:但你仍然不知道你的錯誤在哪裏... –