Python程序:计算顶点到顶点的可达性矩阵
假设我们有一个图,用邻接表表示,我们需要找到一个二维矩阵M,其中
当顶点i和j之间存在路径时,M[i, j] = 1。
否则,M[i, j] = 0。
因此,如果输入如下所示:
则输出将为:
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 |
为了解决这个问题,我们将遵循以下步骤:
ans:= 一个大小为n x n的二维矩阵,其中n是顶点的数量,用0填充。
对于范围从0到n的i,执行:
q:= 一个队列,首先插入i。
当q不为空时,执行:
node:= q的第一个元素,并从q中删除第一个元素。
如果ans[i, node]非零,则
进行下一次迭代。
ans[i, node]:= 1
neighbors:= graph[node]
对于neighbors中的每个n,执行:
将n插入到q的末尾。
返回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] ]
广告