任务描述 本关任务:建立一个以邻接矩阵形式存储的图。 相关知识 1.掌握图的定义和构造方法; 2.掌握图的存储及遍历方法及应用。 测试说明 平台会对你编写的代码进行测试: 测试输入: 3 2 A B V A B 2 A V 4 预期输出: ∞ 2 4 2 ∞ ∞ 4 ∞ ∞
时间: 2023-06-27 08:02:21 浏览: 158
以下是建立邻接矩阵表示的图的代码:
```python
n, m = map(int, input().split()) # 输入节点数n和边数m
nodes = input().split() # 输入节点列表
node_dict = {nodes[i]: i for i in range(n)} # 将节点列表转化为字典,方便后续操作
edges = [[float('inf')] * n for _ in range(n)] # 初始化邻接矩阵
for i in range(m):
start, end, weight = input().split() # 输入边的起点、终点和权重
start, end, weight = node_dict[start], node_dict[end], int(weight)
edges[start][end] = weight # 在邻接矩阵中记录边的权重
edges[end][start] = weight # 由于是无向图,需要同时记录两个方向的边
for i in range(n):
edges[i][i] = 0 # 自环的边权重为0
# Floyd算法求解任意两点之间的最短路径
for k in range(n):
for i in range(n):
for j in range(n):
edges[i][j] = min(edges[i][j], edges[i][k] + edges[k][j])
# 输出邻接矩阵
for row in edges:
print(' '.join(str(x) if x != float('inf') else '∞' for x in row))
```
其中,我们使用了 Floyd 算法来求解任意两点之间的最短路径,算法的时间复杂度为 $O(n^3)$,适用于小规模的图。如果图较大,可以考虑使用 Dijkstra 算法或 Bellman-Ford 算法等更为高效的算法。
阅读全文