计算机求解关系R的传递闭包.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机求解关系R的传递闭包.doc

《应用程序设计 课程设计》报告 班 级:计Z1002班 学 号:2010001419 姓 名:张龙 指导教师:王华 孟亮 杨永强 成绩评定: 计算机求解关系R的传递闭包设计方案简介 设计方案简介 ① 在集合X上的二元关系R的传递闭包是包含R的X上的最小的传递关系R的传递闭包数字图像处理图像和视觉基础一般用B表示定义在具有n个元素集合X上关系R的n×n二值矩阵,则传递闭包的矩阵B+可如下计算: ???? B+ = B + B + B3 + ……+ (B)n  ② 式中矩阵运算时所有乘法都用逻辑与代替,所有加法都用逻辑或代替。上式中的操作次序为B,B(B),B(BB),B(BBB),……,所以在运算的每一步我们只需简单地把现有结果乘以B 概要设计 算法介绍 Warshall算法是求二元关系传递闭包的一种高效的算法。 Warshall在1962年提出了求关系的传递闭包的有效算法。其具体过程如下,设在n个元素的有限集上关系R的关系矩阵为M:(1)置新矩阵A=M;(2)置k=1;(3)对所有i如果A[i,k]=1,则对j=1…n执行: A[i,j]←A[i,j]∨A[k,j]; (4)k增1;(5)如果k≤n,则转到步骤(3),否则停止。所得的矩阵A即为关系R的传递闭包t(R)的关系矩阵。 1. 类型定义: void warshall(int ,int ) void main() 2. 函数调用关系: 4)测试分析 ① 本程序使用网络资源,按照题目要求的算法进行测试,结果正确; ② 算法的思路比较简单,矩阵可以利用数组表示出来,然后只需添加一些命令即编译运行,得到最终的二元关系传递闭包。 ③ 本程序的源程序存在BUG,分别在C-Free和Visual C++ 6.0编译器中调试。均报错出现,更正之后。发现两个编译器中的程序有所不同,最终程序附录之后。 5)使用说明 1.本程序的运行环境为DOS操作环境,执行文件为:closebag.exe; 2.进入演示程序之后如下图所示: 3.之后可任意输入该矩阵的行数、列数,以及矩阵数值,编译链接运行,得到最终的二元关系传递闭包。 6)测试结果 1.首先输入该矩阵的行数、列数,在此选择“4*4”矩阵,当前结果如下图所示: 2. 然后输入该矩阵,在此测试的矩阵数值为{{1,0,0,0},{1,1,1,0},{0,0,1,1},{1,1,0,1}},其输出如下图所示: 编译运行,输出最终结果,如图所示: 附录一:参考资料 太原理工大学卓越专业应用程序课程设计指导书; 百度文库《传递闭包》; 数据结构题集实习报告模版; 百度文库《Warshall算法》; 附录二:源程序 Visual C++ 6.0 中的程序代码: #includestdio.h void warshall(k,n) { int a,b,i,j,t; int temp[20][20]; for(a=0;ak;a++) { printf(请输入矩阵第%d行元素:,a); for(b=0;bn;b++) { scanf (%d,temp[a][b]);//分别输入第1,2,3,4行的元素 } } for(i=0;ik;i++) { for(j=0;jk;j++) { if(temp[j][i]==1) { for(t=0;tn;t++) { temp[j][t]=temp[i][t]||temp[j][t]; } } } } printf(可传递闭包关系矩阵是:\n); for(i=0;ik;i++) { for(j=0;jn;j++) { printf(%d, temp[i][j]); } printf(\n); } }//void warshall void main() { int k,n; printf(利用Warshall算法求二元关系的可传递闭包\n); warshall(); //申明引用函数 printf(请输入矩阵的行数i: ); scanf(%d,k); // 请输入矩阵的行数i printf(请输入矩阵的列数j: ); scanf(%d,n); //请输入矩阵的列数j warshall(k,n); //引用函数 }//void main C—Fre

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档