繁体   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