C语言从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包。
时间: 2023-08-31 19:38:13 浏览: 108
C语言实现三种闭包算法(传递,自反,对称闭包)
5星 · 资源好评率100%
好的,这是一个关于闭包的问题,我可以帮你解答。以下是C语言代码实现:
```c
#include <stdio.h>
#define MAX_SIZE 100
void reflexive_closure(int matrix[MAX_SIZE][MAX_SIZE], int size)
{
// 计算自反闭包
for (int i = 0; i < size; i++) {
matrix[i][i] = 1;
}
}
void symmetric_closure(int matrix[MAX_SIZE][MAX_SIZE], int size)
{
// 计算对称闭包
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (matrix[i][j] == 1) {
matrix[j][i] = 1;
}
}
}
}
void transitive_closure(int matrix[MAX_SIZE][MAX_SIZE], int size)
{
// 计算传递闭包
for (int k = 0; k < size; k++) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (matrix[i][k] == 1 && matrix[k][j] == 1) {
matrix[i][j] = 1;
}
}
}
}
}
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int size)
{
// 打印矩阵
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main()
{
int matrix[MAX_SIZE][MAX_SIZE];
int size;
// 输入矩阵
printf("请输入关系的大小:");
scanf("%d", &size);
printf("请输入关系矩阵:\n");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 计算闭包
reflexive_closure(matrix, size);
symmetric_closure(matrix, size);
transitive_closure(matrix, size);
// 打印闭包矩阵
printf("\n自反闭包、对称闭包、传递闭包:\n");
print_matrix(matrix, size);
return 0;
}
```
在上面的代码中,我们定义了三个函数:reflexive_closure() 、symmetric_closure() 和 transitive_closure() ,分别用于计算自反闭包、对称闭包和传递闭包。由于这三种闭包是可以交换顺序的,因此我们可以按任意顺序调用这三个函数。
在主函数中,我们首先输入关系矩阵,然后计算出三种闭包,最后打印出闭包矩阵。
阅读全文