diff --git a/data_structures/Graphs/Kruskal's Algorithm.java b/data_structures/Graphs/Kruskal's Algorithm.java new file mode 100644 index 00000000..6fc8412c --- /dev/null +++ b/data_structures/Graphs/Kruskal's Algorithm.java @@ -0,0 +1,174 @@ +// Java program for Kruskal's algorithm to find Minimum Spanning Tree +// of a given connected, undirected and weighted graph +import java.util.*; +import java.lang.*; +import java.io.*; + +class Graph +{ + // A class to represent a graph edge + class Edge implements Comparable + { + int src, dest, weight; + + // Comparator function used for sorting edges based on + // their weight + public int compareTo(Edge compareEdge) + { + return this.weight-compareEdge.weight; + } + }; + + // A class to represent a subset for union-find + class subset + { + int parent, rank; + }; + + int V, E; // V-> no. of vertices & E->no.of edges + Edge edge[]; // collection of all edges + + // Creates a graph with V vertices and E edges + Graph(int v, int e) + { + V = v; + E = e; + edge = new Edge[E]; + for (int i=0; i subsets[yroot].rank) + subsets[yroot].parent = xroot; + + // If ranks are same, then make one as root and increment + // its rank by one + else + { + subsets[yroot].parent = xroot; + subsets[xroot].rank++; + } + } + + // The main function to construct MST using Kruskal's algorithm + void KruskalMST() + { + Edge result[] = new Edge[V]; // Tnis will store the resultant MST + int e = 0; // An index variable, used for result[] + int i = 0; // An index variable, used for sorted edges + for (i=0; i