1.避圈法(Kruskal算法–加边法)
克鲁斯克尔算法原理:
按照边的从小到大取边,并入边的两个节点,在这个过程中保证并入边后不构成圈,因此也称避圈法。
算法过程:
1)先对边按权重从小到大排序;
2)取权重最小的一条边,若该边两个节点均为不同分量,则加入最小生成树;
3)以此类推,直至遍历完所有的边。
2.prim算法–加点法
算法过程:
将所有节点划分为两类:selected_node和candidate_node
1)任取一节点加入selected_node,遍历头结点在selected_node,尾节点在candidate_node的边,选取符合条件的权重最小的边,加入最小生成树;
2)将边的尾节点加入selected_node中,并在candidate_node中删除,直至candidate_node中无节点。循环条件为:所有节点都有边连接
3.破圈法实现最小生成树
在克鲁斯克尔算法基础上,我国著名数学家管梅谷教授于1975年提出了最小生成树的破圈法。
算法过程:
1)先将所有的边按权值进行降序排列.
2)之后对于取出的每一个边来说,判断其连接的两个结点是否具有圈.(即先删除次边,然后判断这两个结点是否连接,之后对删除的边进行恢复)
3)对于有圈的,将这条边删除,否则,往下查找.
4)算法结束条件:剩下的边=结点数-1.
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
from numpy import random
import