Warshall算法,Python
时间: 2023-07-10 18:04:48 浏览: 76
Warshall算法是一种用于计算传递闭包的算法。其基本思想是:对于图中的每一个点,检查它是否可以通过其他点到达另一个点,如果可以,则将该点与目标点之间的路径标记为可达。在这个过程中,我们不断地更新可达矩阵,直到所有点之间的可达关系都被确定下来。
以下是一个用Python实现Warshall算法的例子:
```python
def warshall(graph):
n = len(graph)
# 初始化可达矩阵
reach = [[0 for _ in range(n)] for _ in range(n)]
for i in range(n):
for j in range(n):
reach[i][j] = graph[i][j]
# 执行Warshall算法
for k in range(n):
for i in range(n):
for j in range(n):
reach[i][j] = reach[i][j] or (reach[i][k] and reach[k][j])
return reach
# 测试
graph = [[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 0, 0],
[1, 0, 1, 0]]
reach = warshall(graph)
for row in reach:
print(row)
```
在上面的代码中,我们首先初始化可达矩阵为原始图的邻接矩阵,然后执行三重循环,每次检查是否存在一条从i到j的路径经过第k个点。如果存在这样的路径,则将reach[i][j]标记为可达。最终,我们返回更新后的可达矩阵。
阅读全文