continuata implementazione di graph. bfs dfs kruskal dijkstra

This commit is contained in:
2014-05-28 00:52:03 +02:00
parent 395cf8a6e1
commit d6f43a646f
9 changed files with 566 additions and 0 deletions

52
graph/Kruskal.java Normal file
View File

@@ -0,0 +1,52 @@
package graph;
import partition.ListPartition;
import partition.Partition;
import position.NodePositionList;
import position.PositionList;
import priorityqueue.Entry;
import priorityqueue.PriorityQueue;
import priorityqueue.heap.HeapPriorityQueue;
import java.security.InvalidKeyException;
public class Kruskal<V, E> {
protected Graph<V, E> graph;
protected Object WEIGHT;
protected PositionList<Edge<E>> EList;
protected PriorityQueue<Double, Edge<E>> Q;
public Iterable<Edge<E>> execute(Graph<V, E> g, Object w) throws InvalidKeyException{
graph = g;
WEIGHT = w;
Q = new HeapPriorityQueue<Double, Edge<E>>();
EList = new NodePositionList<Edge<E>>();
KruskalAlg();
return EList;
}
protected void KruskalAlg() throws InvalidKeyException{
Partition<Vertex<V>> P = new ListPartition<Vertex<V>>();
for (Vertex<V> w : graph.vertices())
P.makeSet(w);
for (Edge<E> e : graph.edges())
Q.insert((Double) e.get(WEIGHT), e);
while (EList.size() < graph.numVertices() - 1) {
Entry<Double, Edge<E>> e_entry = Q.removeMin();
Edge<E> e = e_entry.getValue();
Vertex<V> endV[] = graph.endVertices(e);
Vertex<V> u = endV[0];
Vertex<V> v = endV[1];
if (P.find(u) != P.find(v)) {
P.union(P.find(u), P.find(v));
EList.addLast(e);
}
}
}
}