// Copyright 2003, Trustees of Indiana University // Please see the license in the file ../LICENSE public class dijkstra_visitor< Graph, QueueType extends MutableQueue, WeightMap extends ReadablePropertyMap/**/, PredecessorMap extends ReadWritePropertyMap/**/, DistanceMap extends ReadWritePropertyMap/**/, DistanceCombine extends BinaryFunction/**/, DistanceCompare extends StrictWeakOrdering/**/, Vertex, Edge extends GraphEdge, Distance> implements Visitor { private WeightMap m_weight; private DistanceCompare m_compare; private DistanceCombine m_combine; private Distance m_zero; private DistanceMap m_distance; private PredecessorMap m_predecessor; private QueueType m_Q; public dijkstra_visitor(QueueType Q, WeightMap weight, PredecessorMap predecessor, DistanceMap distance, DistanceCombine combine, DistanceCompare compare, Distance zero) { m_Q = Q; m_weight = weight; m_predecessor = predecessor; m_distance = distance; m_combine = combine; m_compare = compare; m_zero = zero; } public void initialize_vertex(Vertex u, Graph g) {} public void discover_vertex(Vertex u, Graph g) {} public void examine_edge(Edge e, Graph g) { if (m_compare.less(m_weight.get(e), m_zero)) {} // throw new negative_edge(); Requirement to catch all exceptions could make this painful to use } public void tree_edge(Edge e, Graph g) { relax.relax(e, m_weight, m_distance, m_predecessor, m_combine, m_compare); } public void non_tree_edge(Edge e, Graph g) {} public void gray_target(Edge e, Graph g) { boolean relaxed = relax.relax(e, m_weight, m_distance, m_predecessor, m_combine, m_compare); if (relaxed) m_Q.update(e.target()); } public void black_target(Edge e, Graph g) {} public void finish_vertex(Vertex u, Graph g) {} }