好久没写了,有点遗忘记录一下
kruskal 算法
- 对所有的边排序
- 依次选择每一条边,看是否能将边加入到已经生成好的树中
- 若是能,则加入
- 否则,继续步骤2,直至添加到树中的边的数量为节点数-1 的时候
- 设置一个记录每一个节点的父亲的数组,用于判断将边加进已生成树时是否会有环生成
- 记录一个每一个节点有多少孩子节点的数组,用于节点的合并
- 利用find()方法寻找最原始的父亲
- 利用join()合并
# -*- coding:utf-8 -*-
import sys
class node:
def __init__(self,a,b,v):
self.a =a
self.b = b
self.v = v
def cmpNode(a,b):
if a.v < b.v:
return -1
elif a.v >b.v:
return 1
else:
return 0
def findF(i, father):
if father[i] ==i:
return i
return findF(father[i],father)
def join(a,b,father,son):
root1 = findF(a,father)
root2 = findF(b,father)
if root1 == root2:
re