Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Arrays;
- import java.util.Scanner;
- public class Kruskal_1 {
- public static class Edge implements Comparable<Edge>{
- //Data member
- int bv;
- int ev;
- int cost;
- //Constructor
- public Edge(int bv, int ev, int cost) {
- this.bv = bv;
- this.ev = ev;
- this.cost = cost;
- }
- @Override
- public int compareTo(Edge o) {
- if (this.cost>o.cost) {
- return 1;
- } else if (this.cost<o.cost) {
- return -1;
- } else {
- return 0;
- }
- }
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Scanner sc= new Scanner(System.in);
- int V = 4;
- int E = 5;
- Edge[] edges = new Edge[E];
- for (int i=0; i<E; i++) {
- //input edge
- int bv = sc.nextInt();
- int ev = sc.nextInt();
- int cost = sc.nextInt();
- //create Edge object and store into oneD array
- edges[i] = new Edge(bv, ev, cost);
- }
- Arrays.sort(edges);
- //read edge one by one from edges array
- //the edge will retrieve from least cost to greatest cost
- Edge[] MST = new Edge[V-1];
- parent = new int[V];
- Arrays.fill(parent, -1);
- int index = 0; //how many edge add into tree already
- for (Edge e:edges) {
- int pb = find(e.bv); //parent of beginning vertex
- int pe = find(e.ev); //parent of ending vertex
- if (pb!=pe) {
- MST[index] = e;
- union(pb,pe);
- index++;
- if (index==V-1) {
- break;
- }
- }
- }
- for (Edge e:MST) {
- System.out.println(e.bv+" "+e.ev+" "+e.cost);
- }
- }
- public static int parent[];
- public static int find(int v) {
- if (parent[v]==-1) {
- return v; //himself is root
- } else {
- parent[v] = find(parent[v]);
- return parent[v];
- }
- }
- public static void union(int pb, int pe) {
- parent[pb] = pe;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement