我有一个图形数据结构,我从本文中复制了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然后遍历邻域中的每个唯一顶点?
谢谢。
答案 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);
}
}
}
}