思路
- 他是先选出各边,然后进行排序,从小到大,下面的代码是存储时就进行升序;
- 使用并查集来进行判断他是否重边,下面代码使用了路径压缩,应该还是比较好懂的;
- 然后就没了,思路就是这么简单;
点击查看代码
import java.io.IOException;
import java.util.Scanner;
public class Main {
static int[] flag;
public static void main(String[] args) throws IOException {
LinkNode p;
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int n = str.length();
LinkList list = new LinkList();
for(int i=0;i<n;i++){
for (int j = 0; j < n; j++) {
int temp = sc.nextInt();
if (i >= j) {
if (temp != 0) {
p = new LinkNode(i, j, temp);
list.Insert_order(p);
}
}
}
}
list.Print();
kruskal(list,n,str);
}
private static void kruskal(LinkList L,int n,String str) {
System.out.println("开始采用kruskal算法选择边:");
int sum=0;
LinkNode p=L.head;
flag=new int[n];
char[] a=str.toCharArray();
for(int i=0;i<n;i++) {
flag[i] = i;
}
while(p!=null) {
if(find(p.start)!=find(p.end)) {
System.out.println(a[p.start]+"-->"+a[p.end]+" = "+p.length);
sum+=p.length;
union(p.start,p.end);
}
p = p.next;
}
System.out.println("总权值为:"+sum);
}
private static void union(int x, int y) {
x=find(flag[x]);
y=find(flag[y]);
if (x!=y){
flag[x]=y;
}
}
private static int find(int target) {
if (flag[target]==target){
return target;
}
return find(flag[target]);
}
public static class LinkNode {
public int start;
public int end;
public double length;
public LinkNode next;
public LinkNode(){
this.start = 0;
this.end = 0;
this.length = 0;
this.next = null;
}
public LinkNode(int start,int end,double length){
this.start = start;
this.end = end;
this.length = length;
}
}
public static class LinkList {
public LinkNode head;
public void Insert_order(LinkNode p){
if(head==null) {
head=p;
}else {
if(p.length<head.length) {
p.next=head;
head=p;
}
else {
LinkNode current= head;
while(current.next!=null &&p.length > current.next.length) {
current = current.next;
}
p.next = current.next;
current.next = p;
}
}
}
public void Print(){
LinkNode p=head.next;
System.out.println("有序链表输出如下:");
while(p!=null){
System.out.println(p.start+"-->"+p.end+" = "+p.length);
p = p.next;
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了