离散数学实验二柏超宇解析.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实 验 报 告 (20 / 2016 学年 第 学期) 课程名称 实验名称 实验时间 年 月 日 指导单位 系 指导教师 学生姓名 班级学号 学院(系) 专 业 实 验 报 告 实验名称 指导教师 实验类型 实验学时 实验时间 实验目的和要求 二、实验环境(实验设备) 三、实验原理及内容 1、问题引入   一个有n个顶点的有向图的传递闭包为:有向图中的初始路径可达情况可以参见其邻接矩阵A,邻接矩阵中A[i,j]表示i到j是否直接可达,若直接可达,则A[i,j]记为1,否则记为0;两个有向图中i到j有路径表示从i点开始经过其他点(或者不经过其他点)能够到达j点,如果i到j有路径,则将T[i,j]设置为1,否则设置为0;有向图的传递闭包表示从邻接矩阵A出发,求的所有节点间的路径可达情况,该矩阵就为所要求的传递闭包矩阵。。。 例如: 有向图为: 由该有向图可以得到初始的邻接矩阵为: 那么warshall传递闭包算法的目的就是由邻接矩阵出发,进行探索求出最终的传递闭包: 2、动态规划求解思路   动态规划将问题分段,本例warshall算法是通过一系列n阶矩阵r(k)来构造最终阶段n阶传递闭包矩阵r(n) ???   R(k) 由它的前趋 R(k-1) 计算得到(分级推进计算)。 ???   R(0)?——该矩阵不允许它的路径中包含任何中间顶点,即从该矩阵的任意顶点出发的路径不含有中间顶点,此即邻接矩阵。 ???   R(1)?——允许路径中包含第1个顶点(本例编号 1)作为中间顶点。 ???   R(2)?——允许路径中包含前2个顶点(本例编号1 2)作为中间顶点。 ???   R(k)?——允许路径中包含前k个顶点作为中间顶点。 ???   R(n)?——允许路径中包含全部 n 个顶点作为中间顶点。 ???   每个后继矩阵 R(k)?对其前趋 R(k-1) 来说,在路径上允许增加一个顶点,?因此有可能包含更多的1(增加前为1的在增加后依然为1)。 3、具体的算法描述 1 warshall(A[1...n,1...n] 2 r(0)-A; 3 for(k=1;k=n;k++) 4 for(i=1;i=n;i++) 5 for(j=1;j=n;j++) 6 r(k)[i,j]=r(k-1)[i,j] or(r(k-1)[i,k] and r(k-1)[k,j]); 7 return r(n); 其他几个性质的代码 : int zifan() { int flag1=1; for(i=1;i=n;i++) { if(a[i][i]!=1) { flag1=0; break; } } return flag1; } int fanzifan() { int flag2=1; for(i=1;i=n;i++) { if(a[i][i]==1) { flag2=0; break; } } return flag2; } int duichen() { int flag3=1; for(i=1;i=n;i++) { for(j=1;j=n;j++) { if(a[i][j]!=a[j][i]) { flag3=0; break; } } } return flag3; } 最后我们可以通过返回flag来确定该矩阵具有的相应性质。 四、实验小结(包括问题和解决方法、心得体会、意见与建议等) 关于warshell算法的理解需要很久,其实是一种分段的计算,其他四个性质要严格按照定义来,有的关系可能既有对称性又有反对称性。

您可能关注的文档

文档评论(0)

335415 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档