簡體   English   中英

JGraphT-使用BreadthFirstIterator查找路徑

[英]JGraphT - Finding path with BreadthFirstIterator

這是使用BreathFirstIterator遍歷圖形的代碼:

public class GraphTest {

    public static void main(String[] args) {
        DirectedGraph<Integer, DefaultEdge> graph = 
            new DefaultDirectedGraph <Integer, DefaultEdge>(DefaultEdge.class);

        graph.addVertex(7);
        graph.addVertex(4);
        graph.addVertex(9);
        graph.addVertex(3);
        graph.addVertex(2);
        graph.addVertex(5);


        graph.addEdge(7, 4);
        graph.addEdge(7, 9);
        graph.addEdge(9, 3);
        graph.addEdge(3, 2);
        graph.addEdge(3, 5);

        GraphIterator<Integer, DefaultEdge> iterator = 
                new BreadthFirstIterator<Integer, DefaultEdge>(graph);
        while (iterator.hasNext()) {
            System.out.println( iterator.next() );
        }
    }
}

如預期的那樣,代碼將打印出所有已訪問頂點的列表: 7,4,9,3,2,5 我的問題是-我不知道如何使用此API來獲取刪除了算法回溯的路徑。 例如,對於從7到2的路徑,它將輸出7->9->3->2 ,而不僅僅是已訪問頂點的列表。 到達目的地后僅停止它是遠遠不夠的。 有人解決了這個問題嗎?

使用DijkstraShortestPath.findPathBetween可以得到兩個頂點之間的最短路徑。 它使用ClosestFirstIterator提供了Dijkstra最短路徑算法的實現。 如果沒有這樣的路徑,它將返回null

樣例代碼:

DirectedGraph<Integer, DefaultEdge> graph = new DefaultDirectedGraph<>(DefaultEdge.class);

graph.addVertex(7);
graph.addVertex(4);
graph.addVertex(9);
graph.addVertex(3);
graph.addVertex(2);
graph.addVertex(5);

graph.addEdge(7, 4);
graph.addEdge(7, 9);
graph.addEdge(9, 3);
graph.addEdge(3, 2);
graph.addEdge(3, 5);

List<DefaultEdge> path = DijkstraShortestPath.findPathBetween(graph, 7, 2);
System.out.println(path); // prints [(7 : 9), (9 : 3), (3 : 2)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM