实验内容(3)Warshall算法求关系的传递闭包在给出关系矩阵的基础上,用Washall算法完成关系的传递闭包。用C语言编写
时间: 2023-12-14 16:37:19 浏览: 84
以下是使用Warshall算法求关系的传递闭包的C语言实现:
```c
#include <stdio.h>
#define MAX_SIZE 100
void warshall(int n, int mat[][MAX_SIZE]) {
int i, j, k;
for (k = 0; k < n; k++) {
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (mat[i][k] && mat[k][j]) {
mat[i][j] = 1;
}
}
}
}
}
int main() {
int n, i, j;
int mat[MAX_SIZE][MAX_SIZE];
printf("Enter the size of the matrix (<= %d): ", MAX_SIZE);
scanf("%d", &n);
printf("Enter the matrix:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &mat[i][j]);
}
}
warshall(n, mat);
printf("Transitive closure of the relation:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%d ", mat[i][j]);
}
printf("\n");
}
return 0;
}
```
在该程序中,我们首先输入关系矩阵的大小和元素,然后调用`warshall()`函数来计算关系的传递闭包,并输出结果。`warshall()`函数实现了Warshall算法,使用三重循环来遍历矩阵中的所有元素。如果矩阵中的第`i`行第`j`列元素可以通过中间点`k`传递,则将矩阵中的第`i`行第`j`列元素设置为1。最终,该函数修改了传递闭包矩阵的值。
输出结果显示了计算得到的传递闭包矩阵。
阅读全文