Skip to content

Commit

Permalink
Prim's Algorithm for Finding Minimal Spanning Tree Added
Browse files Browse the repository at this point in the history
  • Loading branch information
eklaDFF committed Jan 13, 2024
1 parent 8d726bf commit b4ed9a1
Showing 1 changed file with 71 additions and 0 deletions.
71 changes: 71 additions & 0 deletions src/Main.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;
public class Main {
Expand Down Expand Up @@ -69,6 +70,33 @@ public static void main(String[] args) {

Bellman_Ford(A2,E2,edgeArrayList2);


System.out.println("--------------------------Prims Spanning Tree--------------------- Example below");

Vertex A3 = new Vertex('A');
Vertex B3 = new Vertex('B');
Vertex C3 = new Vertex('C');
Vertex D3 = new Vertex('D');
Vertex E3 = new Vertex('E');

EdgeArrayList edgeArrayList3 = new EdgeArrayList();
edgeArrayList3.addEdge(A3,B3,5);
edgeArrayList3.addEdge(B3,A3,5);
edgeArrayList3.addEdge(A3,C3,-1);
edgeArrayList3.addEdge(C3,A3,-1);
edgeArrayList3.addEdge(B3,C3,-2);
edgeArrayList3.addEdge(C3,B3,-2);
edgeArrayList3.addEdge(B3,D3,-3);
edgeArrayList3.addEdge(D3,B3,-3);
edgeArrayList3.addEdge(C3,D3,6);
edgeArrayList3.addEdge(D3,C3,6);
edgeArrayList3.addEdge(C3,E3,3);
edgeArrayList3.addEdge(E3,C3,3);
edgeArrayList3.addEdge(D3,E3,2);
edgeArrayList3.addEdge(E3,D3,2);

SpanningTreeByPrims(A3,5,edgeArrayList3);

}
public static void DijkstraAlgo(Vertex source,Vertex destination,EdgeArrayList edgeArrayList){
PriorityQueue<Vertex> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(o -> o.pathDistanceFromSourceVertex));
Expand Down Expand Up @@ -138,4 +166,47 @@ public static void Bellman_Ford(Vertex source,Vertex destination,EdgeArrayList e
path.append(c.name);
System.out.println(path);
}

public static void SpanningTreeByPrims(Vertex root,int vertices, EdgeArrayList edgeArrayList){
PriorityQueue<EdgeArrayList.EdgeArrayListNode> priorityQueue = new PriorityQueue<>(new Comparator<EdgeArrayList.EdgeArrayListNode>(){

@Override
public int compare(EdgeArrayList.EdgeArrayListNode o1, EdgeArrayList.EdgeArrayListNode o2) {
return o1.weight-o2.weight;
}
});

// Spanning Tree Edges
ArrayList<EdgeArrayList.EdgeArrayListNode> spanningTreeEdges = new ArrayList<>();

priorityQueue.addAll(getPathsFrom(root,edgeArrayList));
root.explored = true;
int vertexExplored = 1;
while (vertexExplored < vertices){ // As the vertexExplored becomes vertexExplored==vertices, exploration will be stopped
EdgeArrayList.EdgeArrayListNode c = priorityQueue.remove();
Vertex edgeEndVertex = c.b;
if (!edgeEndVertex.explored){
priorityQueue.addAll(getPathsFrom(edgeEndVertex,edgeArrayList));
edgeEndVertex.explored = true;
vertexExplored++;

// Adding Edge and building spanning tree
spanningTreeEdges.add(c);
}
}

// Printing Spanning Tree
for (EdgeArrayList.EdgeArrayListNode edge : spanningTreeEdges){
System.out.println(edge.a.name + ", " + edge.b.name + ", " + edge.weight);
}
}
public static ArrayList<EdgeArrayList.EdgeArrayListNode> getPathsFrom(Vertex root, EdgeArrayList edgeArrayList){
ArrayList<EdgeArrayList.EdgeArrayListNode> list = new ArrayList<>();
for (EdgeArrayList.EdgeArrayListNode edge : edgeArrayList.edgeArrayList){
if (edge.a.equals(root)){
list.add(edge);
}
}
return list;
}
}

0 comments on commit b4ed9a1

Please sign in to comment.