--- /dev/null
+/*
+ * Created on Jul 10, 2005
+ *
+ * Copyright (c) 2005, the JUNG Project and the Regents of the University
+ * of California
+ * All rights reserved.
+ *
+ * This software is open-source under the BSD license; see either
+ * "license.txt" or
+ * http://jung.sourceforge.net/license.txt for a description.
+ */
+package edu.uci.ics.jung.algorithms.shortestpath;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import edu.uci.ics.jung.graph.Graph;
+import edu.uci.ics.jung.graph.util.Pair;
+
+/**
+ * Utilities relating to the shortest paths in a graph.
+ */
+public class ShortestPathUtils
+{
+ /**
+ * Returns a <code>List</code> of the edges on the shortest path from
+ * <code>source</code> to <code>target</code>, in order of their
+ * occurrence on this path.
+ */
+ public static <V, E> List<E> getPath(Graph<V,E> graph, ShortestPath<V,E> sp, V source, V target)
+ {
+ LinkedList<E> path = new LinkedList<E>();
+
+ Map<V,E> incomingEdges = sp.getIncomingEdgeMap(source);
+
+ if (incomingEdges.isEmpty() || incomingEdges.get(target) == null)
+ return path;
+ V current = target;
+ while (!current.equals(source))
+ {
+ E incoming = incomingEdges.get(current);
+ path.addFirst(incoming);
+ Pair<V> endpoints = graph.getEndpoints(incoming);
+ if(endpoints.getFirst().equals(current)) {
+ current = endpoints.getSecond();
+ } else {
+ current = endpoints.getFirst();
+ }
+ //incoming.getOpposite(current);
+ }
+ return path;
+ }
+}