标签:节点 邻接矩阵 universal 算法导论 and 围墙 开始 判断 行号
来自习题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行所表示的节点显然不是通用汇点。
标签:节点 邻接矩阵 universal 算法导论 and 围墙 开始 判断 行号
原文地址:http://www.cnblogs.com/venux021/p/7400569.html