普利姆算法解决最短修路问题

普利姆算法是一种用于寻找图中最小生成树的算法,适用于解决修路问题。它通过从一个起点开始,每次选择与已连接点距离最小的未连接点,逐步构建最短的连通路径。算法的核心是每次贪心地选取当前可达范围内的最小边,直到所有点都被连接。
摘要由CSDN通过智能技术生成

普利姆算法

1、应用场景-修路问题

在这里插入图片描述

2、最小生成树

在这里插入图片描述
在这里插入图片描述

3、普利姆算法介绍

在这里插入图片描述
在这里插入图片描述

4、普利姆算法的最为简单的理解(重点):

  • 理论上7个点要6条路就可以连通,随便从一个结点(村庄)出发(假设为A),先找该结点和邻居结点(村庄)距离最小的结点(村庄),假设为B,最小路径为A–>B ,这样子A和B连通了。
    把B加入已访问的集合中,则为(A,B)

  • 找A的其他邻居和B的其他邻居,然后找到距离A或者B最小的那个邻居结点,假设为C点,且路径为B–>C最小,则A–>B B–>C 这样A通过B可以走到C,即ABC连通了。把C加入已访问的集合中,则为(A,B,C)

  • 依次往后找,上一段为(A–>B B–>C),比较A,B,C的其他邻居和A,B,C之间的距离,然后找到距离A或者B或者C最小的那个邻居结点(村庄),假设为D点,且路径为B–>D最小,则A–>B B–>C B–>D 这样A通过B可以走到C,也可以走到D,即ABCD连通了。把D加入已访问的集合中,则为(A,B,C,D)

  • 依次循环,n节点需走n-1个次(eg:【点–点--点–点(4个结点(村庄)3条最小路径便能连通)】),就能构建出一条理论上最短的连通路径(有点贪心算法的味道了,每次都取相邻距离最小的点,并且把该点入集合,然后下次再把集合中那几个点的相邻的最小的点放入集合,把所有n个点放完也就n-1次,就构建了n-1条短路,n个村庄就能连起来互通了)


5、普利姆算法最佳实践(修路问题)

在这里插入图片描述

代码实现:

package com.czl.prim;

import java.lang.reflect.Array;
import java.util.Arrays;

public class PrimAlgorithm {
   
    public static void main(String[] args) {
   
        MinTree minTree = new MinTree();
        //测试看看图是否创建成功
        char[] data = new char[] {
   'A', 'B', 'C', 'D', 'E', 'F', 'G'};
        //邻接矩阵的关系使用二维数组表示,10000这个大数,表示两个点不连通
        int[][] weight 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值