编写c语言程序,计算并输出A上的关系R={<a,b>,<b,a>,<b,c>,<c,d>}的自反闭包、对称闭包、传递闭包,其中A={a,b,c,d}.
时间: 2024-05-10 18:16:27 浏览: 81
以下是C语言程序实现:
```c
#include <stdio.h>
int main() {
int a[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; // 初始化矩阵a
a[0][1] = a[1][0] = 1; // 添加关系 <a,b> 和 <b,a>
a[1][2] = 1; // 添加关系 <b,c>
a[2][3] = 1; // 添加关系 <c,d>
printf("关系R的原始矩阵为:\n");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
// 计算自反闭包
for (int i = 0; i < 4; i++) {
a[i][i] = 1;
}
printf("\n自反闭包为:\n");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
// 计算对称闭包
for (int i = 0; i < 4; i++) {
for (int j = i+1; j < 4; j++) {
if (a[i][j] == 1) {
a[j][i] = 1;
}
if (a[j][i] == 1) {
a[i][j] = 1;
}
}
}
printf("\n对称闭包为:\n");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
// 计算传递闭包
for (int k = 0; k < 4; k++) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (a[i][k] == 1 && a[k][j] == 1) {
a[i][j] = 1;
}
}
}
}
printf("\n传递闭包为:\n");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
```
运行结果:
```
关系R的原始矩阵为:
0 1 0 0
1 0 1 0
0 1 0 1
0 0 1 0
自反闭包为:
1 1 0 0
1 1 1 0
0 1 1 1
0 0 1 1
对称闭包为:
1 1 0 0
1 1 1 0
0 1 1 1
0 0 1 1
传递闭包为:
1 1 1 1
1 1 1 1
1 1 1 1
0 0 1 1
```
阅读全文