算法简介

代码
import java.util.ArrayList;
public class KruskalDemo {
public static void main(String[] args) {
creatGraph();
setEdgesList(edges);
shortEdges(edges, list);
}
static int[][] edges;
static ArrayList<Integer[]> list;
static int[] next;
public static void shortEdges(int[][] edges, ArrayList<Integer[]> list) {
ArrayList<Integer[]> result=new ArrayList<>();
while(list.size()!=0) {
Integer[] temp = list.remove(0);
if(check(temp)) {
result.add(temp);
}
}
for(int i=0;i<result.size();i++) {
System.out.println(result.get(i)[0]+"\t"+result.get(i)[1]+"\t"+result.get(i)[2]);
}
}
public static boolean check(Integer[] temp) {
int a = temp[0];
while (next[a] != 0) {
a = next[a];
}
int b = temp[1];
while (next[b] != 0) {
b = next[b];
}
if(a==b&&a!=0) {
return false;
}
next[temp[0]]=temp[1];
return true;
}
public static ArrayList<Integer[]> setEdgesList(int[][] edges) {
list =new ArrayList<>();
for(int i=0;i<edges.length;i++) {
for(int j=i+1;j<edges.length;j++) {
if(edges[i][j]>0) {
Integer[] temp=new Integer[3];
temp[0]=i;
temp[1]=j;
temp[2]=edges[i][j];
int m=0;
while(m<list.size()&&temp[2]>list.get(m)[2]) {
m++;
}
list.add(m, temp);
}
}
}
return list;
}
public static int[][] creatGraph() {
edges= new int[7][7];
next=new int[edges.length];
edges[0] = new int[] { 0, 12, 0, 0, 0, 16, 14 };
edges[1] = new int[] { 12, 0, 10, 0, 0, 7, 0 };
edges[2] = new int[] { 0, 10, 0, 3, 5, 6, 0 };
edges[3] = new int[] { 0, 0, 3, 0, 4, 0, 0 };
edges[4] = new int[] { 0, 0, 5, 4, 0, 2, 8 };
edges[5] = new int[] { 16, 7, 6, 0, 2, 0, 9 };
edges[6] = new int[] { 14, 0, 0, 0, 8, 9, 0 };
return edges;
}
}