This repository was archived by the owner on Nov 10, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPrim.java
More file actions
71 lines (56 loc) · 1.43 KB
/
Prim.java
File metadata and controls
71 lines (56 loc) · 1.43 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
71
/*
* Name: Adam Kaplan
*
* NetID: akaplan6
*
* Project: #4
*
* Lab Section: TR 4:50PM - 6:05PM (I switched my lab section)
*
* TA: Charlie Kelman
*
* I affirm that I have not given or received any unauthorized help on this assignment, and that this work is my own.
*/
import java.util.Arrays;
import java.util.LinkedList;
import java.util.PriorityQueue;
public class Prim {
Graph g;
PriorityQueue<Edge> queue;
LinkedList<Edge> tree;
public Prim(Graph g){
this.g = g;
queue = new PriorityQueue<Edge>();
tree = new LinkedList<Edge>();
}
// Source: http://algs4.cs.princeton.edu/43mst/LazyPrimMST.java.html
private void addEdgesToPQ(Vertex v){
v.visited = true;
for(Edge e : v.adjacentEdges){
if(!e.to.visited)
queue.add(e);
}
}
// Source: http://algs4.cs.princeton.edu/43mst/LazyPrimMST.java.html
private void prim(Vertex v){
tree = new LinkedList<Edge>();
queue = new PriorityQueue<Edge>();
addEdgesToPQ(v);
while(!queue.isEmpty()){
Edge e = queue.remove();
if(e.from.visited && e.to.visited)
continue;
tree.add(e);
if(!e.from.visited)
addEdgesToPQ(e.from);
if(!e.to.visited)
addEdgesToPQ(e.to);
}
}
public LinkedList<Edge> getMinimumWeightTree(Vertex v){
prim(g.vertexList.get(v.id));
LinkedList<Edge> meridianPath = new LinkedList<Edge>();
meridianPath.addAll(tree);
return meridianPath;
}
}