-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_160prim.java
More file actions
70 lines (64 loc) · 1.91 KB
/
_160prim.java
File metadata and controls
70 lines (64 loc) · 1.91 KB
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
import java.util.*;
public class _160prim {
static class Edge{
int src;
int dest;
int wt;
public Edge(int s,int d,int w){
this.src=s;
this.dest=d;
this.wt=w;
}
}
static void createGraph(ArrayList<Edge>[] graph){
for(int i = 0;i<graph.length;i++){
graph[i] = new ArrayList<>();
}
graph[0].add(new Edge(0,1,10));
graph[0].add(new Edge(0,2,15));
graph[0].add(new Edge(0,3,30));
graph[1].add(new Edge(1,0,10));
graph[1].add(new Edge(1,3,40));
graph[2].add(new Edge(2,0,15));
graph[2].add(new Edge(2,3,50));
graph[3].add(new Edge(3,1,40));
graph[3].add(new Edge(3,2,50));
}
static class Pair implements Comparable<Pair>{
int v;
int cost;
public Pair(int v,int c){
this.v=v;
this.cost=c;
}
@Override
public int compareTo(Pair p2){
return this.cost - p2.cost;
}
}
public static void prims(ArrayList<Edge>[] graph){
boolean vis[] = new boolean[graph.length];
PriorityQueue<Pair> pq = new PriorityQueue<>();
pq.add(new Pair(0,0));
int finalCost = 0;
while(!pq.isEmpty()){
Pair curr = pq.remove();
if(!vis[curr.v]){
vis[curr.v] = true;
finalCost += curr.cost;
for(int i = 0;i<graph[curr.v].size();i++){
Edge e = graph[curr.v].get(i);
pq.add(new Pair(e.dest,e.wt));
}
}
}
System.out.println("Final cost : " + finalCost);
}
public static void main(String[] args) {
int V=4;
@SuppressWarnings("unchecked")
ArrayList<Edge> graph[] = new ArrayList[V];
createGraph(graph);
prims(graph);
}
}