最小生成树算法

本文介绍了如何在加权图中寻找最小生成树,分别讲解了Prim算法和Kruskal算法的原理及Java实现。Prim算法从一个顶点开始,逐步添加权值最小的边,确保不形成环路,直至连接所有顶点。Kruskal算法则是先对所有边按权值排序,然后依次选择不会形成环路的最小边,直至连接所有顶点。这两种算法都是图论中的经典算法,常用于解决网络最优化问题。
摘要由CSDN通过智能技术生成

最小生成树算法

最小生成树

      一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边,对于加权图,边的权值之和还应最小。
      连接n个顶点只需要n-1条边。

Prim算法

算法描述

  1. 输入:一个加权连通图,其中顶点集合为V,边集合为E;
  2. 初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;
  3. 重复下列操作,直到Vnew=V:
    (1)在集合E中选取权值最小的边<u, v>,其中u为集合Vnew中的元素,而v不在Vnew集合当中,并且v∈V(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一);
    (2)将v加入集合Vnew中,将<u, v>边加入集合Enew中;
  4. 输出:使用集合Vnew和Enew来描述所得到的最小生成树。

代码

import java.util.Arrays;

/**
 * 最小生成树算法--Prim算法
 * Prim算法:可在加权连通图里搜索最小生成树
 * 图的最小生成树:不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。
 * @author dxt
 *
 */
public class Prim {
   
	public static void main(String[] args) {
   
		char[] vertexs = new char[]{
   'A', 'B', 'C', 'D', 'E', 'F', 'G'};
		int vertexNum = vertexs.length;
		//边权矩阵,其中0表示对应顶点不连通
		int[][] weight = {
   
				{
   0, 5, 7, 0, 0, 0, 2},
				{
   5, 0, 0, 9, 0, 0, 3},
				{
   7, 0, 0, 0, 8, 0, 0},
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值