2016-11-15 65 views
0

目前,我在兩個頂點之間只有一對一的關係。我只想處理兩個頂點之間的多個關係。我怎樣才能做到這一點?如何獲得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; 
} 

回答

0

在你的頂點類嘗試添加相應的節點的一個HashMap或ArrayList的。在添加邊時,將ID(或頂點的其他標識特徵)添加到ArrayList/HashMap中,然後每次您想要查看每個頂點所連接的節點時,都可以簡單地檢查ArrayList/HashMap。這也將幫助您實施一種高效的addEdge算法,該算法不會添加節點之間已存在的邊。還要記住,如果您正在實現有向圖節點A→節點B!=節點B→節點A,那麼請確保在實現中不留出邊緣。

相關問題