#include <stdio.h>
#include <stdlib.h>
#define N 50
//求对称闭包以及传递闭包
int main()
{
printf("请输入集合,以空格分隔,以 回车 + Ctrl + z 结束\n");
int number[N];
int n = 0;
while(n<50)
{
if((scanf("%d",&number[n])!=EOF))
{
//printf("%d\n",number[n]);
n++;
}
else
break;
}
int R[n][n];//关系矩阵
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
R[i][j] = 0;//关系矩阵初始化
}
}
printf("请输入关系的个数\n");
int k = 0;
scanf("%d",&k);
printf("请输入具有关系的两个数以,分隔,回车输入下一组\n");
for (int i=0; i<k; i++)
{
int number1,number2;
scanf("%d,%d",&number1,&number2);
for (int j=0; j<n; j++)
{
for (int m =0 ; m<n; m++)
if (number1==number[j]&&number2==number[m])
{
R[j][m]=1;
}
}
}
printf("输入的关系矩阵为:\n");
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
printf("%3d",R[i][j]);
}
printf("\n");
}
//关系矩阵创建完毕
int r[n][n];
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
r[j][i]=0;
}
}
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
if(R[i][j]==1)
{
r[j][i]=1;
r[i][j]=1;
}
}
}
printf("对称闭包矩阵为:\n");
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
printf("%3d",r[i][j]);
}
printf("\n");
}
printf("传递闭包矩阵为:\n");
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
if(R[i][j]==1)
{
for(int k=0; k<n; k++)
{
if(R[j][k]==1)
R[i][k]=1;
}
}
}
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
printf("%3d",R[i][j]);
}
printf("\n");
}
return 0;
}
求对称闭包以及传递闭包
最新推荐文章于 2024-10-15 10:41:56 发布
2974

被折叠的 条评论
为什么被折叠?



