#include <stdio.h>
int a[5][5], b[5][5]/*缓冲数组*/, c[5][5] = {0}/*储存最终结果用的矩阵*/;
int huilu(int, int);
int main() {
int i, j, k, l=0, m=0, min;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
scanf("%d", &a[i][j]);
}
}/*输入赋权图,且一条边的权要在v1出v2入和v2出v1入两个点上各输入一次*/
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
b[i][j] = a[i][j];
}
}/*为缓冲数组赋值*/
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
min = b[0][0];
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
if (b[i][j] < min) {
min = b[i][j];
l = i;
m = j;
}
}
}/*找到赋权图中权最小的边*/
if (huilu(l, m)) {
c[l][m] = b[l][m]; /*将找到的最小边存到结果数组中去*/
}
b[l][m] = 99999; /*破坏掉该最小边,避免接下来影响查找,因此权只能输入小于99999的数*/
}
}
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
printf("%d", c[i][j]); /*将求好的最小生成树打印出来*/
}
printf("\n");
}
return 0;
}
int huilu(int l, int m) {
int d[5][5], e[5][5] = {0}, i, j, k, o, q = 0;
for (j = 0; j < 5; j++) {
for (k = 0; k < 5; k++) {
d[k][j] = c[k][j];
}
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
for (k = 0; k < 5; k++) {
for (o = 0; o < 5; o++) {
e[k][j] += d[o][j] * c[k][o];
}
}
}/*求矩阵c的可达性矩阵*/
for (j = 0; j < 5; j++) {
for (k = 0; k < 5; k++) {
d[k][j] = e[k][j];
}
}
}
if (d[l][m] == 0) {
q = 1;
}/*如果b[l][m]将要存的点在可达矩阵中值为零,则在该点存值不会造成回路*/
return q;
}

输入后没有结果输出
能不能在不改变总体算法的情况下帮忙改一下。