15.最小生成树问题

这篇博客介绍了一种解决最小生成树问题的方法——Prim算法。通过贪婪选择策略,从一个起始点开始,逐步选择与现有树最近且权值最小的节点加入,直至所有节点都被包含,形成最小生成树。文章提供了Java代码实现,包括Comparator接口的两个实现类,以及一系列辅助类用于排序和优先队列操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要先说明一下其实这种最小生成树问题的作用领域感觉还是比较实际的,意思就是在已知的坐标位置上进行生成最小生成树而这生成树能使得整体的距离之和最小,如果在现实生活中的话就是能够使得已有的位置之间建立的完整道路线最短,相应的费用就最低!!!

1.直接进行贪婪选择说明

如图中所示,一开始先给定了起始点(就是生成树的根),然后将位置记录下来,然后遍历剩下的位置,看看哪些位置在跟位置的附近,然后找出其中权值最小的,记录第二个位置以及相应的权值;(每次都要将位置点放在一个集合中,记该集合为U)然后再比遍历剩下的点中哪些点在已有集合U中位置点附近的,找出权值最小的,再记录下该位置点以及权值,位置点还是要放在集合U中,多次循环直到所有的点全部放到集合U中,就说明生成树已经OK!

算法伪代码:

MST-PRIM(G,w,r)

1.    U<-{r}

2.    T<-NULL

3.    Q<-V-{r}

4.    while Q!=NULL

5.      do (u,v)<-集合除去U点外剩下的点中在其附近且权值最小

6.        T<-T合并(u,v)//记录权值

7.        U<-U合并v  //记录位置点

8.        Q<-Q-v  //除去被记录的点

9.    return T

JAVA:

Greater.java

package Jamin;
import java.util.Comparator;
public class Greater implements Comparator<Comparable>{
public int compare(Comparable x,Comparable y) {
    return x.compareTo(y);
}
}
 

Less.java

package Jamin;
import java.util.Comparator;
public class Less implements Comparator<Comparable>{
public int compare(Comparable x,Comparable y) {
    return y.compareTo(x);
}
}
 

LinearList.java

package Jamin;
import java.util.*;
public class LinearList {
  public static int partition(List<Comparable> a,int p,int r,Comparator comp)//如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。
 {
     Comparable x;
      int i,j;
      x=a.get(r);
      i=p-1;
     for(j=p;j<r;j++)
         if(comp.compare(a.get(j), x)<=0) {//如果不符合规则比较则为-1,符合则为1
             i++;
             Collections.swap(a, i, j);
         }
     Collections.s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值