2016-11-15 36 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,那么请确保在实现中不留出边缘。

相关问题