今天给大家介绍一种计算传递闭包的算法—Warshall算法。
//Warshall算法
#include <stdio.h>
#include <stdlib.h>
#define N 10
int main()
{
int a[N][N];
int b[N][N] = { 0 };
int i, j, k, m;
printf("请输入阶数:");
scanf_s("%d", &m);
printf("\n请输入矩阵:\n");
for (i = 0;i < m;i++)
{
for (j = 0;j < m;j++)
{
scanf_s("%d", &b[i][j]);
}
}
for (i = 0;i < m;i++)
{
for (j = 0;j < m;j++)
{
a[i][j] = b[i][j];
}
}
for (i = 0;i < m;i++)
{
for (j = 0;j < m;j++)
{
for (k = 0;k < m;k++)
{
if (a[i][j] && (a[i][k] || a[j][k]))
{
a[i][k] = 1;
}
}
}
}
printf("原布尔矩阵:\n");
for (i = 0;i < m;i++)
{
for (j = 0;j < m;j++)
{
printf("%d ", b[i][j]);
}
printf("\n");
}
printf("\n原矩阵的传递闭包:\n");
for (i = 0;i < m;i++)
{
for (j = 0;j < m;j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
}
验证一下:
大功告成!!!