闭包运算实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的

了解和掌握闭包运算的概念,熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。

二、实验内容

从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,传递闭包要求使用Warshall算法,用C语言实现。

三、思路分析(即代码分析)

声明:R[][]表示关系R;x[]表示集合X; r[]表示自反闭包;s[]表示对称闭包;t[]表示传递闭包

(一),输入形式:

先输出提示符:

请先输入集合X中元素的个数,之后输入集合X中的元素(不同元素之

间用空格隔开,行末用回车结束):

第一行:先输入集合X中元素的个数n,空一格之后输入集合X中的元素,不同元素之间用空格隔开,行末用回车结束:

输出提示符:

请先输入集合X上的二元关系R的序偶对个数,再输入集合X上的二元

关系R,每一对序偶用a,b表示,序偶之间用空格隔开,行末用回车结束:第二行:先输入集合X上的二元关系R的序偶对个数,空一格之后输入集合X上的二元关系R,每一对序偶用a,b表示,序偶之间用空格隔开,行末用回车结束:

(二)、输入记录:

记录时将X中的元素按照输入的次序依次编号,存储在数组x[]中对应编号的位置

1,通过输入的集合X中元素的个数n来控制之后的元素输入循环次数;

2,通过输入的集合X上二元关系序偶对的个数来控制之后序偶对的输入循环次数;

3,输入序偶对时,每次直接输入到临时变量a,b中,之后在集合x[]中遍历,找到此次输入的序偶对在x[]所对应的位置,之后将二维矩阵R[][]对应位置置1,表示有此对应关系

(三),自反闭包计算

将关系R[][]复制到自反闭包 r[][] 矩阵中,之后将行数等于列数的元素置1,便按照自反闭包定义将矩阵r[][]扩充到符合要求

(四),对称闭包计算

扫瞄关系矩阵R[][],记录其中不为1的元素的行列数,之后将对称矩阵s[][]相应的行列数和行数和列数相反的位置都置1;便按照对称闭包定义将矩阵r[][]扩充到符合要求

(五),传递闭包计算

1,按照Warshall算法,先将R[][]复制到r[][]中,

2,遍历r[][]的每列,在每列中找到不为0的元素r[i][j],之后将j行与i

行对应的元素进行逻辑加,将结果赋值到第i行上去;

3,遍历完每一列后所得的矩阵就是传递闭包的对应矩阵

四、实验结果与分析

对于输出的闭包关系中,每对序偶用a,b表示,序偶之间用空格隔开,每输出一次用回车结束

(例)每次输出时先输出提示符:

关系R的自反闭包为:

Sample Output:

关系R的自反闭包为:

a,a a,b b,b b,d c,a c,c d,d d,e e,b e,e

关系R的对称必包为:

a,b a,c b,a b,d b,e c,a d,b d,e e,b e,d

关系R的传递必包为:

a,b a,d a,e b,b b,d b,e c,a c,b c,d c,e d,b d,d d,e e,b e,d e,e

五、VS2010中验证结果(全视图):

请先输入集合X中元素的个数,之后输入集合X中的元素(不同元素之间用空格隔开,行末用回车结束):

5 a b c d e

请先输入集合X上的二元关系R的序偶对个数,再输入集合X上的二元关系R,每一对序偶用a,b表示,序偶之间用空格隔开,行末用回车结束:

5 a,b b,d c,a d,e e,b

关系R的自反闭包为:

a,a a,b b,b b,d c,a c,c d,d d,e e,b e,e

关系R的对称必包为:

a,b a,c b,a b,d b,e c,a d,b d,e e,b e,d

关系R的传递必包为:

a,b a,d a,e b,b b,d b,e c,a c,b c,d c,e d,b d,d d,e e,b e,d e,e 请按任意键继续. . .

六、实际输出:

相关文档
最新文档