编写程序,基于关系的矩阵表示,实现关系的自反闭包、对称闭包、传递闭包运算;利用编写的程序,计算并输出A上的关系R={<a,b>,<b,a>,<b,c>,<c,d>}的自反闭包、对称闭包、传递闭包,其中A={a,b,c,d}. 编程语言可选择C
时间: 2024-05-13 13:14:39 浏览: 218
以下是基于关系的矩阵表示,实现关系的自反闭包、对称闭包、传递闭包运算的C语言程序:
```c
#include <stdio.h>
#define MAX_SIZE 100
int R[MAX_SIZE][MAX_SIZE]; // 关系矩阵
int n; // 集合大小
// 初始化关系矩阵
void init() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
R[i][j] = 0;
}
}
}
// 输出关系矩阵
void print() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", R[i][j]);
}
printf("\n");
}
}
// 自反闭包
void reflexive_closure() {
for (int i = 0; i < n; i++) {
R[i][i] = 1;
}
}
// 对称闭包
void symmetric_closure() {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (R[i][j] == 1) {
R[j][i] = 1;
} else if (R[j][i] == 1) {
R[i][j] = 1;
}
}
}
}
// 传递闭包
void transitive_closure() {
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (R[i][k] == 1 && R[k][j] == 1) {
R[i][j] = 1;
}
}
}
}
}
int main() {
n = 4;
init();
// 输入关系
R[0][1] = R[1][0] = 1;
R[1][2] = 1;
R[2][3] = 1;
printf("关系矩阵:\n");
print();
reflexive_closure();
printf("自反闭包后的关系矩阵:\n");
print();
symmetric_closure();
printf("对称闭包后的关系矩阵:\n");
print();
transitive_closure();
printf("传递闭包后的关系矩阵:\n");
print();
return 0;
}
```
输出结果为:
```
关系矩阵:
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 0 0
1 1 1 1
0 1 1 1
0 0 1 1
```
阅读全文