簡體   English   中英

快速確定JUNG圖中的兩個節點是否通過一條以上路徑連接的快速方法?

[英]Fast way of determining whether two nodes in a JUNG graph are connected by more than one path?

給定有向JUNG圖中的兩個節點AB ,我想確定從AB是否有一條以上的路徑(不一定是最短的路徑)。

我只能想到兩種方法,兩者都很費時。

  1. 檢索連接兩個節點的所有路徑 (問題是否在JUNG中找到所有路徑? ),然后檢查是否有多個路徑

  2. 通過使用類DijkstraShortestPath檢索最短路徑,然后斷開該路徑並再次搜索最短路徑。 如果還有一條,則意味着存在多條路徑。 請注意,這也需要克隆圖,因為我不想更改原始圖。

我如何才能更智能(即更快 )?

我自己找到了解決方案。

我的問題還有一個額外的約束,即我只想檢查是否只有兩個直接與and edge連接的節點有一條以上的路徑。 這意味着通過簡單地計算最短路徑,您將始終獲得這條單邊作為路徑。

因此,我的問題可以改寫為:

除了邊緣本身之外,是否還有另一條路徑連接邊緣的兩個節點?

解決方案是使用加權的最短路徑。 如果我們給感興趣的邊緣分配了非常高的權重,而給所有其他權重分配了權重1 ,那么如果最小距離小於我們的高權重,則答案為 ,否則為

這是代碼:

public static boolean areThereMultiplePaths(final Edge edge, DirectedGraph<Entity, Edge> graph) {
        Transformer<Edge, Integer> transformer = new Transformer<Edge, Integer>() {
            public Integer transform(Edge otherEdge) {
                if (otherEdge.equals(edge))
                    return Integer.MAX_VALUE;
                else
                    return 1;
            }
        };

        DijkstraShortestPath<Entity, Edge> algorithm = new DijkstraShortestPath<Entity, Edge>(graph, transformer);
        Double distance = (Double) algorithm.getDistance(edge.getStartNode(), edge.getEndNode());

        return distance < Integer.MAX_VALUE; 
    }

暫無
暫無

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

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