prim算法并写出一个详细实例,附上输入输出值
时间: 2024-03-03 08:51:24 浏览: 96
好的,以下是prim算法的一个详细实例,包括输入输出值:
题目描述:
给定一个无向图,求其最小生成树的边权和。
输入格式:
第一行包含两个整数n和m,表示无向图的点数和边数。
接下来m行,每行包含三个整数a,b,c,表示点a和点b之间存在一条边,边权为c。
输出格式:
输出一个整数,表示最小生成树的边权和,如果图不连通则输出impossible。
样例输入:
```
3 3
1 2 1
2 3 2
1 3 3
```
样例输出:
```
3
```
算法实现:
```python
N = 510
INF = 0x3f3f3f
g = [[INF] * N for _ in range(N)] # 存储图的邻接矩阵
dist = [INF] * N # 存储每个节点到当前已选中的节点集合的最小距离
st = [False] * N # 存储每个节点是否已经被选中
n, m = map(int, input().split())
for _ in range(m):
a, b, c = map(int, input().split())
g[a][b] = g[b][a] = min(g[a][b], c)
res = 0
for i in range(n):
t = -1
for j in range(1, n + 1):
if not st[j] and (t == -1 or dist[t] > dist[j]):
t = j
if i and dist[t] == INF:
print('impossible')
break
if i:
res += dist[t]
st[t] = True
for j in range(1, n + 1):
dist[j] = min(dist[j], g[t][j])
else:
print(res)
```
输入输出解释:
输入共有两行,第一行为整数n和m,表示无向图的点数和边数,本例中n=3,m=3。
接下来m行每行包含三个整数a,b,c,表示点a和点b之间存在一条边,边权为c。本例中有3条边,分别为1-2,2-3,1-3,对应的边权分别为1,2,3。
程序运行时,首先将所有边的权值存储到邻接矩阵g中,然后进行prim算法的求解过程,最终输出最小生成树的边权和,即3。
阅读全文