簡體   English   中英

如何在bfs java中獲取兩個頂點之間的所有邊

[英]How to get all the edges between two vertices in bfs java

目前,我在兩個頂點之間只有一對一的關系。 我只想處理兩個頂點之間的多個關系。 我怎樣才能做到這一點?

我當前的代碼是:

 public Collection<Vertex<V, E>> bfs() {

    Queue<Graph.Vertex<V, E>> queue = new ArrayBlockingQueue<>(this.getVertices().size());
    Collection<Vertex<V, E>> queryVertices = new LinkedList<>();
    Vertex<V, E> source = this.vertices.get(0);
    Set<Vertex<V, E>> visited = new HashSet<>();

    visited.add(source);
    queue.add(source);
    queryVertices.add(source);

    while (!queue.isEmpty()) {
        Graph.Vertex<V, E> v = queue.remove();
        Graph.Vertex<V, E> w;
        while ((w = getAdjUnvisitedVertex(v, visited)) != null) {
            visited.add(w);
            queue.add(w);
            queryVertices.add(w);
        }
    }

    return queryVertices;
}

private Vertex<V, E> getAdjUnvisitedVertex(Vertex<V, E> v, Set<Vertex<V, E>> visited) {

    for (Graph.Edge<V, E> edge : v.edges) {
        if (!visited.contains(edge.getTo())) {
            return edge.getTo();
        }
    }
    return null;
}

在您的Vertex類中,嘗試添加對應節點的HashMap或ArrayList。 添加邊時,將ID(或頂點的其他某些識別功能)添加到ArrayList / HashMap中,然后每次想查看每個頂點所連接的節點時,都可以簡單地檢查ArrayList / HashMap。 這也將幫助您實現高效的addEdge算法,該算法不會添加節點之間已經存在的邊。 還請記住,如果您要實現有向圖,則節點A->節點B!=節點B->節點A,因此請確保在實現中不要遺漏任何邊緣。

暫無
暫無

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

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