最小生成树(java版)

📑前言

本文主要是【最小生成树】——最小生成树使用的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见

目录

    • 📑前言
    • Prime最小生成树
    • Kruskal最小生成树
    • 📑文章末尾

  • 以如下的图为例

Prime最小生成树

  • 按结点来进行遍历
package 图论;import java.util.Arrays;
import java.util.Scanner;public class 最小生成树_Prime {
/*
6
0 6 1 5 0 0
6 0 5 0 3 0
1 5 0 5 6 4
5 0 5 0 0 2
0 3 6 0 0 6
0 0 4 2 6 0*/public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int n = sc.nextInt();//顶点个数int g[][] = new int[n][n];//dis[i]=0; 表示顶点i已经被纳入最小生成树,dis[i]表示最小生成树到顶点i的目前最小距离int dis[] = new int[n];//目前最小生成树到其它未访问顶点的最小距离for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {int w = sc.nextInt();//读入矩阵if(i==j) g[i][j]=0;//自己到自己距离是0else if(w==0) g[i][j]=Integer.MAX_VALUE;//不可达,默认无穷大else {g[i][j]=w;//否则存储真实的权值}}}for(int x[]:g) {System.out.println(Arrays.toString(x));}//prime求最小生成树primedo(g, dis, n);}public static void primedo(int[][] g,int[] dis,int n) {//最小生成树要包含n个结点,所以这里默认开始Vo结点僵尸最小生成树的第一个结点//dis数组存最小生成树到其它未被选择的最小距离0到其它结点的距离for(int i=0;i<n;i++) dis[i]=g[0][i];dis[0]=0;int ans=0;for(int i=1;i<n;i++) {//n个结点,最后选择n-1条边,循环就n-1次int min=Integer.MAX_VALUE;int minindex=-1;//存储最小结点的编号for(int j=0;j<n;j++) {if(dis[j]<min && dis[j]!=0) {min = dis[j];minindex=j;//当前j是最小的,未被纳入的顶点编号}}ans=ans+dis[minindex];dis[minindex]=0;//把dis[minindex]=0表示minindex结点本轮被纳入最小生成树了for(int j=0;j<n;j++) {dis[j]=Math.min(dis[j], g[minindex][j]);}}System.out.println(ans);}
}

Kruskal最小生成树

  • 按边来寻找
package 图论;import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;public class Kruskal {
/*
6 10
0 1 6
0 2 1
0 3 5
1 2 5
1 4 3
2 3 5
2 4 6
2 5 4
3 5 2
4 5 6*/static int[] f;//父亲数组public static int find(int x) {if(f[x]==x) return x;else {f[x]=find(f[x]);return f[x];}}public static boolean merge(int a,int b) {int f1=find(a);int f2=find(b);if(f1!=f2) {f[f1]=f2;return true;//两个顶点来自不同的联通分量}else return false;//否则形成环,这条边是不合法的}public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();//n个顶点,m条边int num=0;//表示目前已经采用多少条边int sum=0;//最小生成树的边权累加和f = new int[n];for(int i=0;i<f.length;i++) f[i]=i;//大家属于鼓励联通分量ArrayList<edge> list = new ArrayList<edge>();for(int i=0;i<m;i++) list.add(new edge(sc.nextInt(), sc.nextInt(), sc.nextInt()));Collections.sort(list);for(int i=0;i<list.size();i++) System.out.println(list.get(i));for(int i=0;i<list.size();i++) {//去检测m条边,不断做合并edge check = list.get(i);if (merge(check.start,check.end)) {//根据并查集不断的查找两个顶点是否在同一个集合System.out.println("采纳"+check);sum=sum+check.weight;num++;if(num==n-1) break;}else {System.out.println("不采纳");}}System.out.println(sum);}static class edge implements Comparable<edge>{int start;int end;int weight;public edge(int s,int e,int w) {this.start=s;this.end = e;this.weight=w;}@Overridepublic int compareTo(edge o) {// TODO Auto-generated method stubreturn this.weight-o.weight;}public String toString() {return String.format("start=%d\t end=%d\t weight=%d", start,end,weight);}}
}

📑文章末尾

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/422993.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是VUE 创建第一个VUE实例

一、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套 构建用户界面 的 渐进式 框架 Vue2官网&#xff1a;Vue.js 1.什么是构建用户界面 基于数据渲染出用户可以看到的界面 2.什么是渐进式 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vu…

从丘成桐、张益唐的超国民待遇,看孙卫东风光回国的可能性

复旦博士孙卫东在美国流浪16年&#xff0c;这事儿最近在国内媒体沸沸扬扬&#xff0c;围绕着是否让孙卫东回国&#xff0c;国民形成了截然对立的两派&#xff1a;一派呼吁帮其回国&#xff0c;认为他身上流着中国人的血、是我们的同胞&#xff1b;另一派则是反对阻止&#xff0…

SpringMVC环境搭配

概述 Spring MVC是Spring Framework提供的Web组件&#xff0c;全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架&#xff0c;提供前端路由映射、视图解析等功能 mvc是什么 MVC是一种软件架构思想&#xff0c;把软件按照模型&#xff0c;视图&#xff0c;控制器来划分…

Python3+Selenium框架搭建

Webdriver概述 Webdriver (Selenium2&#xff09;是一种用于Web应用程序的自动测试工具&#xff0c; Thoughtworks公司一个强大的基于浏览器的开源自动化测试工具&#xff0c;通常用来编写web应用的自动化测试。 Selenium 是一个用于Web应用程序测试的工具。 Selenium测试直…

【大数据】流处理基础概念(二):时间语义(处理时间、事件时间、水位线)

流处理基础概念&#xff08;二&#xff09;&#xff1a;时间语义 1.流处理场景下一分钟的含义2.处理时间3.事件时间4.水位线5.处理时间与事件时间 本篇博客&#xff0c;我们将介绍流式场景中时间语义和不同的时间概念。我们将讨论流处理引擎如何基于乱序事件产生精确结果&#…

(二十四)Kubernetes系列之Helm3

Helm为kubernetes的包管理工具&#xff0c;就像Linux下的包管理器&#xff08;yum/apt等&#xff09;&#xff0c;可以很方便的将之前打包好的yaml文件部署到kubernetes上。 1.安装访问地址&#xff1a;https://github.com/helm/helm/releases 点击查看最新的版本&#xff0c…

MAXWELL

MAXWELL 一、maxwell是什么 maxwell 官网地址&#xff1a;http://maxwells-daemon.io/ 因为官网是纯英文的&#xff0c;倒是不难懂&#xff0c;但总觉得写的略粗糙&#xff08;也可能笔者英文水平确实拉胯&#xff0c;有待提高&#xff09;。所以还是自己百度了一下。 当my…

一篇搞定大论文参考文献,从找文献到交叉引用全流程

我们在写论文过程中&#xff0c;肯定会引用他人的文献&#xff0c;根据自己的写作经历&#xff0c;总结了一套很实用且不会出错的引用方法。1、记录文献顺序 你在论文中每引用一篇文献&#xff0c;你就在文献后加上[1][2]…[n]&#xff0c;然后新建一个word文档&#xff0c;在…

java使用easyexcel读取excel内容

java 代码读取excel内容。 使用阿里巴巴easyexcel读取excel内容。 ##excel内容 ##依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.5</version></dependency> ##实体类T…

茅台瑞幸合作“龙年酱香巧克力”;黄仁勋英伟达中国区年会;马斯克预言:20年后地球10亿个人形机器人;闲鱼微信小程序即将上线;张雪峰向郑州大学捐款300万

今日精选 • 茅台与瑞幸合作“龙年酱香巧克力”饮品开卖&#xff0c;单杯优惠价18元• 黄仁勋现身英伟达中国区年会• 马斯克支持大胆预言&#xff1a;20年后地球上将有大约10亿个人形机器人• 闲鱼微信小程序即将上线• 张雪峰向郑州大学捐款300万 科技动态 • Adobe 发布 …

安科瑞AEM96系列三相多功能碳结算电能表——安科瑞赵嘉敏

引言 近年来&#xff0c;我国加速推进碳达峰碳中和标准计量体系建设&#xff0c;但随着各地区、各领域、各行业对碳排放核算数据的需求显著提升&#xff0c;当前碳排放核算体系数据更新偏慢、核算口径不一、基础排放因子滞后等一系列问题也开始凸显。新形势下对碳排放统计核算…

小小蓝的异或消除

题目 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();sc.nextLine();int res 0;for(int i1;i<n;i){int m sc.nextInt()…