帮我写一个简单的C语言程序,要求:用户可以主动选择进行自反闭包、对称闭包和传递闭包的运算,并且主函数只起到调用的作用
时间: 2024-03-05 14:51:24 浏览: 66
C语言实现三种闭包算法(传递,自反,对称闭包)
5星 · 资源好评率100%
好的,以下是一个简单的C语言程序,实现了自反闭包、对称闭包和传递闭包的运算。用户可以通过输入数字选择对应的运算,然后输入矩阵的维度和元素,程序会输出对应运算的结果。
```c
#include <stdio.h>
#include <stdlib.h>
// 自反闭包
void reflexive_closure(int n, int a[][n]) {
for (int i = 0; i < n; i++) {
a[i][i] = 1;
}
}
// 对称闭包
void symmetric_closure(int n, int a[][n]) {
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
if (a[i][j] == 1) {
a[j][i] = 1;
}
else if (a[j][i] == 1) {
a[i][j] = 1;
}
}
}
}
// 传递闭包
void transitive_closure(int n, int a[][n]) {
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][k] == 1 && a[k][j] == 1) {
a[i][j] = 1;
}
}
}
}
}
// 打印矩阵
void print_matrix(int n, int a[][n]) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
}
int main() {
int n;
printf("请输入矩阵的维度:");
scanf("%d", &n);
int a[n][n];
printf("请输入矩阵的元素(用0或1表示):\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
int choice;
printf("请选择需要进行的运算:\n");
printf("1. 自反闭包\n");
printf("2. 对称闭包\n");
printf("3. 传递闭包\n");
scanf("%d", &choice);
switch (choice) {
case 1:
reflexive_closure(n, a);
printf("自反闭包结果为:\n");
print_matrix(n, a);
break;
case 2:
symmetric_closure(n, a);
printf("对称闭包结果为:\n");
print_matrix(n, a);
break;
case 3:
transitive_closure(n, a);
printf("传递闭包结果为:\n");
print_matrix(n, a);
break;
default:
printf("选择无效!\n");
break;
}
return 0;
}
```
阅读全文