目录
一、自反闭包
理论很简单,就是R并上它的对角线全为一即可,比较容易实现
二、对称闭包
就是R并上它的逆
三、传递闭包
这个在上一篇博客上也说啦,在此不再赘述
四、代码实现
#include<stdio.h>
#define N 100
int main()
{
int n,i,j,k,a[N][N],b[N][N],c[N][N]={0};
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j) b[i][j]=1;
else b[i][j]=a[i][j];
if(a[i][j]==1)
{
c[i][j]=1;
c[j][i]=1;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if (a[j][i])
{
for(k=0;k<n;k++)
{
a[j][k] = a[j][k]||a[i][k];//逻辑加 ,还有离散老师讲的那个第i行甲第j行,送回第j行
}
}
}
}
printf("r(R):\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
printf("s(R):\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",c[i][j]);
}
printf("\n");
}
printf("t(R):\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
五、运行结果
六、总结
还是要想清楚,要不然到后面会乱,耗时很久,总算搞出来了。
版权声明:本文为crhispretty原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。