算法导论习题 通用汇点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法导论习题 通用汇点相关的知识,希望对你有一定的参考价值。
来自习题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行所表示的节点显然不是通用汇点。
以上是关于算法导论习题 通用汇点的主要内容,如果未能解决你的问题,请参考以下文章