用python实现Kruskal算法求最小生成树,不要使用类
时间: 2024-10-18 22:19:24 浏览: 24
在Python中,可以使用字典和集合数据结构来实现Kruskal算法,这是一种用于寻找无向图中最小生成树的贪心算法。下面是简单的步骤:
1. **创建边的数据结构**:使用元组表示每条边,包含两个节点及其权重。
```python
edges = [(1, 2, 7), (1, 5, 9), (2, 4, 14), (2, 5, 10), (3, 4, 15), (3, 5, 11)]
```
2. **按权重排序**:将所有边按照权重从小到大排序。
```python
sorted_edges = sorted(edges, key=lambda x: x[2])
```
3. **初始化集合和最小生成树**:`forest`表示每个节点单独为一棵树,`mst`存储最小生成树的边。
```python
forest = {node: [node] for node in set(node for edge in edges for node in edge)}
mst = []
```
4. **遍历边并加入最小生成树**:如果新边连接的两个节点不在同一棵树中,则合并它们,并将这条边添加到最小生成树中。
```python
for edge in sorted_edges:
u, v, weight = edge
if len(forest[u]) < len(forest[v]):
u, v = v, u
forest[v].extend(forest[u])
del forest[u]
mst.append(edge)
if len(forest) == len(set(range(1, len(edges)+1))):
break
```
5. **检查是否找到所有节点**:当森林中的节点数等于图的节点数减一(因为每个树都对应一个节点)时,说明找到了最小生成树。
6. **返回结果**:`mst`就是最小生成树的所有边。
阅读全文