图顶点和边的BFS作为邻居

时间:2016-11-03 13:53:22

标签: java algorithm graph graph-algorithm

我有一个图形数据结构,我从本文中复制了http://www.dreamincode.net/forums/topic/377473-graph-data-structure-tutorial/

我想在其上实施BFS算法。我不完全确定如何 - 我看到/阅读的关于算法的大多数文章都使用更简单的数据结构。此数据结构存储顶点的哈希映射,其字符串表示为键,然后还使用整数作为键存储边的哈希映射。

这是我尝试实现我发现的BFS示例时遇到的问题的一个示例 -



public void bfs(Vertex rootNode){

        Queue q = new LinkedList();
        q.add(rootNode);
        rootNode.visited=true;
        while(!q.isEmpty()){
            Vertex n = (Vertex)q.poll();
            System.out.print(n.toString() + " ");
            for(Vertex adj : n.getNeighbors()){ -- Here's my problem. Get neighbors doesn't                                                     return a list of verts, it returns a list of                                                   edges.
                if(!adj.visited){
                    adj.visited=true;
                    q.add(adj);
                }
            }
        }

    }




我是否需要调用getNeighbors然后遍历邻域中的每个唯一顶点?

谢谢。

1 个答案:

答案 0 :(得分:1)

您需要调用getNeighbors并迭代每个边(因此每个顶点)。

public void bfs(Vertex rootNode){

        Queue q = new LinkedList();
        q.add(rootNode);
        rootNode.visited=true;
        while(!q.isEmpty()){
            Vertex n = (Vertex)q.poll();
            System.out.print(n.toString() + " ");
            for(Edge edge : n.getNeighbors()){
                Vertex adj = edge.getNeighbor(n);
                if(!adj.visited){
                    adj.visited=true;
                    q.add(adj);
                }
            }
        }

}