0% found this document useful (0 votes)
4 views3 pages

Assigment No 3

The document provides a Java implementation of Kruskal's Minimal Spanning Tree algorithm using a greedy search approach. It defines classes for edges and subsets, sorts the edges by weight, and constructs the MST by selecting edges that do not form cycles. The program outputs the edges of the constructed MST along with its total cost.

Uploaded by

SukantGurav
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views3 pages

Assigment No 3

The document provides a Java implementation of Kruskal's Minimal Spanning Tree algorithm using a greedy search approach. It defines classes for edges and subsets, sorts the edges by weight, and constructs the MST by selecting edges that do not form cycles. The program outputs the edges of the constructed MST along with its total cost.

Uploaded by

SukantGurav
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Problem Statement: Implement Greedy search algorithm for Kruskal's Minimal

Spanning Tree Algorith .


Code:
package com.mainapp;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class KruskalsMST {


static class Edge {
int src, dest, weight;

public Edge(int src, int dest, int weight)


{
this.src = src;
this.dest = dest;
this.weight = weight;
}
}
static class Subset {
int parent, rank;

public Subset(int parent, int rank)


{
this.parent = parent;
this.rank = rank;
}
}

public static void main(String[] args)


{
int V = 4;
List<Edge> graphEdges = new ArrayList<Edge>(
List.of(new Edge(0, 1, 10), new Edge(0, 2, 6),
new Edge(0, 3, 5), new Edge(1, 3, 15),
new Edge(2, 3, 4)));

graphEdges.sort(new Comparator<Edge>() {
@Override public int compare(Edge o1, Edge o2)
{
return o1.weight - o2.weight;
}
});

kruskals(V, graphEdges);
}
private static void kruskals(int V, List<Edge> edges)
{
int j = 0;
int noOfEdges = 0;
Subset subsets[] = new Subset[V];
Edge results[] = new Edge[V];
for (int i = 0; i < V; i++) {
subsets[i] = new Subset(i, 0);
}
while (noOfEdges < V - 1) {
// Pick the smallest edge. And increment
// the index for next iteration
Edge nextEdge = edges.get(j);
int x = findRoot(subsets, nextEdge.src);
int y = findRoot(subsets, nextEdge.dest);
if (x != y) {
results[noOfEdges] = nextEdge;
union(subsets, x, y);
noOfEdges++;
}

j++;
}
System.out.println(
"Following are the edges of the constructed MST:");
int minCost = 0;
for (int i = 0; i < noOfEdges; i++) {
System.out.println(results[i].src + " -- "
+ results[i].dest + " == "
+ results[i].weight);
minCost += results[i].weight;
}
System.out.println("Total cost of MST: " + minCost);
}
private static void union(Subset[] subsets, int x,
int y)
{
int rootX = findRoot(subsets, x);
int rootY = findRoot(subsets, y);

if (subsets[rootY].rank < subsets[rootX].rank) {


subsets[rootY].parent = rootX;
}
else if (subsets[rootX].rank
< subsets[rootY].rank) {
subsets[rootX].parent = rootY;
}
else {
subsets[rootY].parent = rootX;
subsets[rootX].rank++;
}
}

private static int findRoot(Subset[] subsets, int i)


{
if (subsets[i].parent == i)
return subsets[i].parent;

subsets[i].parent
= findRoot(subsets, subsets[i].parent);
return subsets[i].parent;
}
}

Output:

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy