求二元关系的对称闭包等

这里写图片描述`

#include<stdio.h>
void main()
{int a[100],n,i;
printf("集合个数:");
scanf("%d",&n);
printf("该集合为:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int b[100][100],e[100][100],d[100][100],f[100][100],j;
printf("请输二元关系的关系矩阵:\n");
for(j=0;j<n;j++)
for(i=0;i<n;i++)
scanf("%d",&b[j][i]);
int z,x=0,c=0;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
d[j][i]=b[j][i];
for(i=0;i<n;i++)
if(b[i][i]==0)
d[i][i]=1;
printf("该二元关系的自反闭包:\n");
for(j=0;j<n;j++)
{for(i=0;i<n;i++)
printf("%2d",d[j][i]);printf("\n");}
for(j=0;j<n;j++)
for(i=0;i<n;i++)
e[j][i]=b[j][i];
for(j=0;j<n;j++)
for(i=0;i<j;i++)
if(b[j][i]==1||b[i][j]==1)
{e[j][i]=1;e[i][j]=1;}
printf("该二元关系的对称闭包:\n");
for(j=0;j<n;j++)
{for(i=0;i<n;i++)
printf("%2d",e[j][i]);printf("\n");}
for(j=0;j<n;j++)
for(i=0;i<n;i++)
f[j][i]=b[j][i];
while(c==0)
{c=1;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
for(z=0;z<n;z++)
if(f[j][z]==1&&f[z][i]==1)
f[j][i]=1;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
for(z=0;z<n;z++)
if(f[j][z]==1&&f[z][i]==1&&f[j][i]==0)
c=0;}
printf("该二元关系的传递闭包:\n");
for(j=0;j<n;j++)
{for(i=0;i<n;i++)
printf("%2d",f[j][i]);printf("\n");}}

这里写代码片

猜你喜欢

转载自blog.csdn.net/feiqipengcheng/article/details/81590263
今日推荐