warshall算法.pptVIP

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

具体来说,当且仅当,从节点i到节点j存在一条有向路径,且该路径上的每一个中间节点的编号都不大于k时,矩阵R(k)的第i行第j列的元素rij(k)=1。 R(0)就只是有向图的邻接矩阵。 R(1)包含可以用第一个顶点作为中间点的路径信息。 R(n)说明可以用所有的顶点作为中间点寻找有向路径,所以R(n)就是我们要求的传递闭包。 这个算法的中心是我们可以通过R(k-1)来计算R(k)的所有元素。 矩阵乘法的算法 void Mult_matrix( int c[][], int a[][], int b[][], int n)  {   // a、b 和 c 均为 n 阶方阵,且 c 是 a 和 b 的乘积   for (i=1; i=n; ++i)    for (j=1; j=n; ++j) {     c[i,j] = 0;     for (k=1; k=n; ++k)      c[i,j] += a[i,k]*b[k,j];    }  }// Mult_matrix 算法的时间复杂度为? (n3) 。 * Warshall算法 有向图的传递闭包 一个n顶点有向图的传递闭包可以定义为一个n阶布尔矩阵T={tij},如果顶点i到顶点j存在一条有效路径,则tij=1,否则tij=0。 Warshall算法思想 划分阶段 用n阶布尔矩阵R(k)(0≤k ≤n)来表示有向图中任意一对节点是否有有向路径的信息。 因此,可将原问题划分为如下的决策阶段: R(0),…, R(k-1), R(k),…, R(n) vi,每个节点编号都不大于k的中间节点集,vj * Warshall算法思想 确定递推关系式 对于路径: vi,每个节点编号都不大于k的中间节点集C,vj 情况1:Vk∈C,那么中间节点集合的节点编号定不会大于k-1,因此有: rij(k)=rij(k-1) , Vk∈C 情况2: Vk∈C ,则有路径: vi,编号≤k-1的节点集,Vk,编号≤k-1的节点集, vj 此时节点i到节点j是否有路径,取决于两部分“编号≤k-1的节点集”,因此有: rij(k)=rik(k-1) 和 rkj(k-1) , Vk∈C * Warshall算法思想 递推关系式 rij(k)=rij(k-1)or rik(k-1)and rik(k-1) * Warshall算法实例 该矩阵反映了不包含中间顶点的路径,框起来的行和列用来计算R(1) 该矩阵反映了包含编号不大于1的中间顶点(也就是a)的路径(有一条从d到b的新路径)框起来的行和列用来计算R (2) 包含编号不大于2的中间顶点(也就是a,b) 包含编号不大于3的中间顶点a,b,c)的路径,没有新路径 包含编号不大于4的中间顶点(a,b,c,d)的路径.有五条新路径 * Warshall算法 算法 Warshall(A[1..n,1..n]) //实现计算传递闭包的Warshall算法 //输入:包括n个节点有向图的邻接矩阵 //输出:该有向图的传递闭包 R(0)?A for(k?1;k=n;k++) for(i?1;i=n;i++) for(j?1;j=n;j++) R(k)[i,j]?R(k-1)[i,j] or R(k-1)[i,k] and R(k-1)[k,j] return R(n) * * * rij(k)=rij(k-1)or rik(k-1)and rik(k-1) * * * * * * * * rij(k)=rij(k-1)or rik(k-1)and rik(k-1) * * *

文档评论(0)

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

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

1亿VIP精品文档

相关文档