1.想象一下你是个城市基建规划者,地图上有N座城市,它们按以1到N的次序编号。 给你一些可连接的选项connections,其中每个选项connections[i] = [city1, city2, cost]表示将城市city1和城市city2连接所要的成本(连接是双向的,也就是说城市city1和城市city2相连,也同样意味着城市city2和城市city1相连)。返回使得每对城市间都存在将它们连接在一起的连通路径(可能长度为1的)最小成本。该最小成本应该是所有全部连接代价的总合。如果根据已知条件无法完成该项任务,则请你返回-1。 (请用Prim算法完成相应的代码)
时间: 2024-02-05 18:10:44 浏览: 342
Prim算法是一种贪心算法,用于在加权连通图中查找最小生成树。
代码如下:
```python
import heapq
def minimum_cost(N: int, connections: List[List[int]]) -> int:
# 构建邻接矩阵
graph = [[float('inf')] * (N+1) for _ in range(N+1)]
for conn in connections:
graph[conn[0]][conn[1]] = graph[conn[1]][conn[0]] = conn[2]
# Prim算法
visited = set()
heap = []
for i in range(1, N+1):
heapq.heappush(heap, (graph[1][i], i))
visited.add(1)
res = 0
while heap:
cost, node = heapq.heappop(heap)
if node in visited:
continue
visited.add(node)
res += cost
for i in range(1, N+1):
if i not in visited:
heapq.heappush(heap, (graph[node][i], i))
return res if len(visited) == N else -1
```
时间复杂度为O(N^2 log N),空间复杂度为O(N^2)。
阅读全文