Skip to content

Commit 6bca05c

Browse files
authored
Create Floyd.c
1 parent 08c98a7 commit 6bca05c

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

Algorithm/Floyd.c

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
#define TRUE 1
5+
#define FALSE 0
6+
#define MAX_VERTICES 100
7+
#define INF 10000000
8+
9+
typedef struct GraphType {
10+
int n;
11+
int weight[MAX_VERTICES][MAX_VERTICES];
12+
} GraphType;
13+
14+
int A[MAX_VERTICES][MAX_VERTICES];
15+
16+
void printA(GraphType* g) {
17+
int i, j;
18+
printf("==========================\n");
19+
for (int i = 0; i < g->n; i++) {
20+
for (int j = 0; j < g->n; j++) {
21+
if (A[i][j] == INF) {
22+
printf(" * ");
23+
}
24+
else {
25+
printf("%3d", A[i][j]);
26+
}
27+
}
28+
printf("\n");
29+
}
30+
31+
printf("==========================\n");
32+
}
33+
34+
void floyd(GraphType* g) {
35+
for (int i = 0; i < g->n; i++) {
36+
for (int j = 0; j < g->n; j++) {
37+
A[i][j] = g->weight[i][j];
38+
}
39+
}
40+
41+
printA(g);
42+
43+
for (int k = 0; k < g->n; k++) {
44+
for (int i = 0; i < g->n; i++) {
45+
for (int j = 0; j < g->n; j++) {
46+
if (A[i][k] + A[k][j] < A[i][j]) {
47+
A[i][j] = A[i][k] + A[k][j];
48+
}
49+
}
50+
}
51+
52+
printA(g);
53+
}
54+
}
55+
56+
int main(void) {
57+
GraphType g = { 7,
58+
{
59+
{ 0, 7, INF , INF , 3, 10, INF },
60+
{ 7, 0, 4, 10, 2, 6, INF },
61+
{ INF , 4, 0, 2 , INF , INF , INF },
62+
{ INF , 10, 2, 0, 11, 9, 4 },
63+
{ 3, 2, INF , 11, 0, INF , 5 },
64+
{ 10, 6, INF , 9, INF , 0, INF },
65+
{ INF , INF , INF , 4, 5, INF , 0 }
66+
}};
67+
floyd(&g);
68+
69+
return 0;
70+
}

0 commit comments

Comments
 (0)