C++之以图建树(普里姆算法,克鲁斯卡尔算法)最小生成树

226 阅读1分钟

1.普利姆算法:相邻节点权值最小优先

2.克鲁斯卡尔算法:先对相邻节点(以权值最小)排序,再相连

总:在相连时要判断是否会构成回路

问:这两种算法的结果唯一吗?

在无向图中,最小生成树可能是唯一的,也可能不是唯一的。具体来说,如果在无向图中,边的权重都是唯一的,那么最小生成树就是唯一的。但是,如果存在两条或多条边的权重相等,则可能存在多个最小生成树,因为在构建最小生成树的过程中,可能存在多种选择。

在有向图中,不存在最小生成树的概念,只有最小生成森林(Minimum Spanning Forest)。同样的,如果有向图的边的权重都是唯一的,则最小生成森林是唯一的。但是,如果存在两条或多条边的权重相等,则可能存在多个最小生成森林

简单来说:”森林“就是在一个图中有多个子图,而这些子图都能形成一棵树,那么把他们所形成的树放在一起就是森林了。

以下为手画图解释: