用 Python 计算顶点到顶点可达性矩阵的程序
programmingpythonserver side programming
假设我们有一个图作为邻接列表表示,我们必须找到 2D 矩阵 M,其中
当顶点 i 和 j 之间存在路径时,M[i, j] = 1。
否则,M[i, j] = 0。
因此,如果输入如下
那么输出将是
1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
为了解决这个问题,我们将遵循这些步骤 −
ans:= 一个大小为 n x n 的二维矩阵,其中 n 是顶点数,用 0 填充
对于范围在 0 到 n 内的 i,执行
q:= 一个队列,并将 i 插入到队列的开头
当 q 不为空时,执行
node:= q 的第一个元素,并从 q 中删除第一个元素
如果 ans[i, node] 非零,则
进行下一次迭代
ans[i, node]:= 1
邻居:= graph[node]
对于邻居中的每个 n,执行
在 q 末尾插入 n
返回 ans
让我们看看下面的实现以便更好地理解 −
示例
class Solution: def solve(self, graph): ans=[[0 for _ in graph] for _ in graph] for i in range(len(graph)): q=[i] while q: node=q.pop(0) if ans[i][node]: continue ans[i][node]=1 neighbors=graph[node] for n in neighbors: q.append(n) return ans ob = Solution() adj_list = [[1,2],[4],[4],[1,2],[3]] priunt(ob.solve(adj_list))
输入
[[1,2],[4],[4],[1,2],[3]]
输出
[[1, 1, 1, 1, 1], [0, 1, 1, 1, 1], [0, 1, 1, 1, 1], [0, 1, 1, 1, 1], [0, 1, 1, 1, 1] ]