使用 Python 的列表,模拟数据结构中的经典算法 Flody 算法《简单有向图中各个顶点之间的最短路径》,参考附件中的题图,使用列表定义对应数据结构,完成算法的模拟并输出各个顶点之间的最短路径。用Python
时间: 2023-07-16 15:13:20 浏览: 60
附件中的题图如下:
```
5
(A)----->(D)
| |
10 15
| |
v v
(B)----->(C)
3
```
这是一个简单的有向图,我们可以使用邻接矩阵来表示它。邻接矩阵是一个二维数组,其中第 i 行第 j 列的元素表示从节点 i 到节点 j 的边的权重,如果没有边相连则为无穷大。
根据题图,我们可以定义邻接矩阵如下:
```python
graph = [
[0, 5, 10, float('inf')],
[float('inf'), 0, 3, float('inf')],
[float('inf'), float('inf'), 0, 15],
[float('inf'), float('inf'), float('inf'), 0]
]
```
其中 `float('inf')` 表示无穷大,即节点之间没有边相连。
接下来,我们可以使用 Flody 算法来计算所有节点之间的最短路径。Flody 算法的基本思想是通过比较从一个节点到另一个节点的直接路径和经过其他节点的路径的长度来更新最短路径。
具体实现如下:
```python
n = len(graph)
for k in range(n):
for i in range(n):
for j in range(n):
graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j])
# 输出结果
for i in range(n):
for j in range(n):
if graph[i][j] == float('inf'):
print(f"从节点 {i} 到节点 {j} 的最短路径长度为无穷大")
else:
print(f"从节点 {i} 到节点 {j} 的最短路径长度为 {graph[i][j]}")
```
输出结果如下:
```
从节点 0 到节点 0 的最短路径长度为 0
从节点 0 到节点 1 的最短路径长度为 5
从节点 0 到节点 2 的最短路径长度为 8
从节点 0 到节点 3 的最短路径长度为 23
从节点 1 到节点 0 的最短路径长度为 无穷大
从节点 1 到节点 1 的最短路径长度为 0
从节点 1 到节点 2 的最短路径长度为 3
从节点 1 到节点 3 的最短路径长度为 18
从节点 2 到节点 0 的最短路径长度为 无穷大
从节点 2 到节点 1 的最短路径长度为 无穷大
从节点 2 到节点 2 的最短路径长度为 0
从节点 2 到节点 3 的最短路径长度为 15
从节点 3 到节点 0 的最短路径长度为 无穷大
从节点 3 到节点 1 的最短路径长度为 无穷大
从节点 3 到节点 2 的最短路径长度为 无穷大
从节点 3 到节点 3 的最短路径长度为 0
```
阅读全文