首页 > 编程语言 > 详细

算法导论习题 通用汇点

时间:2017-08-20 18:02:32      阅读:440      评论:0      收藏:0      [点我收藏+]

来自习题22.1-6

给出O(V)时间算法判断有向图G是否存在一个通用汇点(universal sink)。通用汇点指的是入度为|V|-1,出度为0的节点。

思路:

考虑图的邻接矩阵A,假设i为通用汇点,则对于0<=j<n,有A[i][j]=0,且对于所有0<=k<n and k != i,有A[k][i] = 1,注意这里k!=i

相当于在子矩阵A[0..i][0..i]的右边和下边造了一个围墙,最下边全是0,最右边除了右下角外全是1

那么可以令游标从矩阵左上角开始,遇1向下,逢0向右,直到行或列超出矩阵A的界限,注意不是子矩阵。此时若游标所在行没有超出界限,那和这个行号 r 就可能是通用汇点编号。

接下来再根据定义验证 r 是否就是通用汇点。因为可能存在以下的情况:

x x x x 1 x x x
x x x x 1 x x x
x x x x 1 x x x
x x x x 1 x x x
0 0 0 0 0 0 0 0
x x x x 0 x x x
x x x x 0 x x x
x x x x 0 x x x

矩阵第5行所表示的节点显然不是通用汇点。

算法导论习题 通用汇点

原文:http://www.cnblogs.com/venux021/p/7400569.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!