-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKruskal Algorithm
97 lines (95 loc) · 2.3 KB
/
Kruskal Algorithm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.util.*;
class Node {
int v,u,w;
Node(int v,int u,int w)
{
this.v=v;
this.u=u;
this.w=w;
}
Node(){}
int getV(){return v;}
int getU(){return u;}
int getW(){return w;}
}
class SortComparator implements Comparator<Node>{
@Override
public int compare(Node node1, Node node2)
{
if(node1.getW()<node2.getW()){return -1;}
if(node1.getW()>node2.getW()){return 1;}
return 0;
}
}
class SolveAlgo {
int findpar(int u,int par[])
{
if(u==par[u])
{
return u;
}
return par[u] = findpar(par[u],par);
}
void union(int v,int u,int par[],int rank[])
{
u = findpar(u,par);
v = findpar(v,par);
if(rank[v]<rank[u])
{
par[v]=u;
}
else if(rank[v]>rank[u])
{
par[u]=v;
}
else
{
par[u]=v;
rank[u]++;
}
}
public void kruskal(ArrayList<Node> adj, int node)
{
Collections.sort(adj,new SortComparator());
int par[] = new int[node];
int rank[] = new int[node];
ArrayList<Node> mst = new ArrayList<Node>();
for(int i=0;i<node;i++)
{
par[i]=i;
rank[i]=0;
}
int cost =0;
for(Node i:adj)
{
if(findpar(i.getV(),par) != findpar(i.getU(),par))
{
cost += i.getW();
mst.add(i);
union(i.getV(),i.getU(),par,rank);
}
}
System.out.print("total weight = "+cost);
System.out.println("\nshortest path is ");
for(Node i:mst)
{
System.out.print("form "+i.getV()+" to "+i.getU());
System.out.println();
}
}
}
public class KruskalAlgo {
public static void main(String arg[])
{
int node = 5;
ArrayList<Node> adj = new ArrayList<Node>();
adj.add(new Node(0,1,2));
adj.add(new Node(0,3,6));
adj.add(new Node(1,3,8));
adj.add(new Node(1,2,3));
adj.add(new Node(1,4,5));
adj.add(new Node(2,0,7));
SolveAlgo s = new SolveAlgo();
s.kruskal(adj,node);
}
}