warshall算法求关系闭包c语言
时间: 2023-10-19 13:07:44 浏览: 133
下面是使用 Warshall 算法求关系闭包的 C 语言代码:
```c
#include <stdio.h>
#define MAXSIZE 100
int main()
{
int n, i, j, k;
int R[MAXSIZE][MAXSIZE], C[MAXSIZE][MAXSIZE];
printf("Enter the size of the set: ");
scanf("%d", &n);
printf("Enter the binary relation R:\n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &R[i][j]);
// 初始化 C 为 R
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
C[i][j] = R[i][j];
// 使用 Warshall 算法求 C 的传递闭包
for (k = 0; k < n; k++)
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
C[i][j] = C[i][j] || (C[i][k] && C[k][j]);
printf("The transitive closure of R is:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%d ", C[i][j]);
printf("\n");
}
return 0;
}
```
代码中使用了两个二维数组 `R` 和 `C`,其中 `R` 存储输入的二元关系,`C` 则存储计算的传递闭包。算法的核心部分使用了三重循环,依次枚举所有顶点,使用 Warshall 算法的递推公式进行更新。
最后输出计算得到的传递闭包 `C` 即可。
阅读全文