用c语言求二元关系R= {<a,a>,<a,b>,<b,a>,<b,c>,<c,b>,<d,d>}的三种闭包,要求传递闭包用warshall方法。
时间: 2023-06-06 13:04:18 浏览: 165
好的,这是一个关于二元关系R的问题。R= {<a,a>,<a,b>,<b,a>,<b,c>,<c,b>,<d,d>},需要求出三种闭包。这三种闭包分别是自反闭包、对称闭包和传递闭包。
自反闭包:R的自反闭包是包含所有二元组<a,a>、<b,b>、<c,c>、<d,d>的最小自反关系。因此,自反闭包为:R1= {<a,a>,<b,b>,<c,c>,<d,d>,<a,b>,<b,a>,<b,c>,<c,b>}。
对称闭包:R的对称闭包是包含所有对称关系的最小对称关系。因此,对称闭包为:R2= {<a,a>,<b,b>,<c,c>,<d,d>,<a,b>,<b,a>,<b,c>,<c,b>,<c,d>,<d,c>}。
传递闭包:R的传递闭包是包含所有传递关系的最小传递关系。求传递闭包常用的方法是Warshall算法。Warshall算法的基本思想是,对于二元关系R中的任意两个元素a和b,如果a和b之间有一条路径通过其他元素可达,则在传递闭包中添加<a,b>。
Warshall算法的步骤如下:
1. 初始化传递闭包T为R;
2. 对于T中的每个元素<i,j>,如果存在一个元素<k,i>和一个元素<j,l>,使得<i,l>不在T中,则添加<i,l>到T中;
3. 重复步骤2,直到T不再改变。
按照这个步骤,可以求出R的传递闭包:T= {<a,a>,<a,b>,<b,a>,<b,c>,<c,b>,<d,d>,<a,c>,<c,a>,<b,b>,<c,c>}。
综上所述,二元关系R= {<a,a>,<a,b>,<b,a>,<b,c>,<c,b>,<d,d>}的三种闭包分别是自反闭包R1= {<a,a>,<b,b>,<c,c>,<d,d>,<a,b>,<b,a>,<b,c>,<c,b>},对称闭包R2= {<a,a>,<b,b>,<c,c>,<d,d>,<a,b>,<b,a>,<b,c>,<c,b>,<c,d>,<d,c>},传递闭包T= {<a,a>,<a,b>,<b,a>,<b,c>,<c,b>,<d,d>,<a,c>,<c,a>,<b,b>,<c,c>}。
阅读全文