V = [1,2,3,4] E = [(1,2),(2,1),(1,3),(2,3),(3,4),(4,3)] G = nx.DiGraph() G.add_edges_from(E)怎么求G的可达矩阵
时间: 2023-10-06 13:14:07 浏览: 104
可以使用 NetworkX 库中的 `floyd_warshall_numpy()` 函数来计算有向图 G 的可达矩阵。具体步骤如下:
1. 将有向图 G 转化为邻接矩阵形式;
2. 使用 `floyd_warshall_numpy()` 函数计算邻接矩阵的所有节点间最短路径;
3. 对于每个节点对 (i, j),如果存在从节点 i 到节点 j 的路径,则将矩阵中对应位置的值设为 1,否则设为 0。
下面是具体的 Python 代码实现:
```python
import numpy as np
import networkx as nx
# 定义有向图 G
V = [1, 2, 3, 4]
E = [(1, 2), (2, 1), (1, 3), (2, 3), (3, 4), (4, 3)]
G = nx.DiGraph()
G.add_edges_from(E)
# 将有向图 G 转化为邻接矩阵形式
A = nx.to_numpy_matrix(G, nodelist=V)
# 使用 floyd_warshall_numpy() 函数计算邻接矩阵的所有节点间最短路径
D = nx.floyd_warshall_numpy(G)
# 对于每个节点对 (i, j),如果存在从节点 i 到节点 j 的路径,则将矩阵中对应位置的值设为 1,否则设为 0
R = np.zeros_like(A)
for i in range(len(V)):
for j in range(len(V)):
if D[i, j] < np.inf:
R[i, j] = 1
print(R)
```
输出结果为:
```
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[0. 0. 1. 1.]
[0. 0. 1. 1.]]
```
其中,矩阵中的第 i 行第 j 列表示节点 i 是否可以到达节点 j。因此,上述结果表示:
- 节点 1 可以到达所有节点;
- 节点 2 可以到达所有节点;
- 节点 3 可以到达节点 3 和 4;
- 节点 4 可以到达节点 3 和 4。
阅读全文