/*
* 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;
}
}