Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调试BFS树travesal算法_Java_Graph_Breadth First Search - Fatal编程技术网

Java 调试BFS树travesal算法

Java 调试BFS树travesal算法,java,graph,breadth-first-search,Java,Graph,Breadth First Search,我独自一人在做这个项目,可以用另一双眼睛来观察这个项目,看看我做错了什么。第一个循环无限运行 public void bfs(String start) { //Initial Case add_queue.add(start); graph.visit(start); Iterator<String> neighbors; String neighbor; while(

我独自一人在做这个项目,可以用另一双眼睛来观察这个项目,看看我做错了什么。第一个循环无限运行

public void bfs(String start)
    {   
        //Initial Case
        add_queue.add(start);
        graph.visit(start);

        Iterator<String> neighbors;
        String neighbor;

        while(!add_queue.empty())
        {
            neighbors = graph.neighbors(start);
            neighbor = neighbors.next();
            graph.visit(neighbor);
            add_queue.add(neighbor);
            while(neighbors.hasNext())
            {
                neighbor = neighbors.next();
                if(!graph.isVisited(neighbor))  //If vertex is not visited it is new and is added to the queue
                {
                    add_queue.add(neighbor);
                    graph.visit(neighbor);
                }

            }   
            start = add_queue.remove();
            remove_queue.add(start);    //transfers vertex from add_queue to remove queue so that the order that the vertices were traversed is stored in memory    
        }
    }
public void bfs(字符串开始)
{   
//初始案例
添加队列。添加(开始);
访问(开始);
迭代器邻居;
串邻居;
而(!add_queue.empty())
{
邻居=图形。邻居(开始);
邻居=邻居。下一步();
访问(邻居);
添加队列。添加(邻居);
while(neights.hasNext())
{
邻居=邻居。下一步();
if(!graph.isvisted(neighbor))//如果未访问顶点,则该顶点是新的,并添加到队列中
{
添加队列。添加(邻居);
访问(邻居);
}
}   
start=add_queue.remove();
remove_queue.add(start);//将顶点从add_queue传输到remove queue,以便顶点的遍历顺序存储在内存中
}
}

添加队列的定义是什么

这可能是一个不好的命名问题,但听起来像是
empty()
做了一些事情,而不仅仅是检查它是否为空(这可能被称为
isEmpty()


此外,看起来您总是在每个外部循环中添加至少1个添加队列(就在内部while之前),但每次迭代只从添加队列中删除一项。

什么是
add\u queue
empty()
的定义

这可能是一个不好的命名问题,但听起来像是
empty()
做了一些事情,而不仅仅是检查它是否为空(这可能被称为
isEmpty()


此外,看起来您总是在每个外部循环中添加至少1个添加队列(在内部while之前),但每次迭代仅从添加队列中删除一个项目。

我认为您添加的是邻居的第一个顶点,而没有检查它是否已被访问。。在这里:

neighbor = neighbors.next(); <- you get first
graph.visit(neighbor); <- you visit
add_queue.add(neighbor); <- you add it without any check
while(neighbors.hasNext())
{
  neighbor = neighbors.next();
  if(!graph.isVisited(neighbor)) <- you do check for the others
  {
     add_queue.add(neighbor);
     graph.visit(neighbor);
  }
}

neighbor=neighbors.next() 我认为您正在添加邻居的第一个顶点,而没有检查它是否已被访问。。在这里:

neighbor = neighbors.next(); <- you get first
graph.visit(neighbor); <- you visit
add_queue.add(neighbor); <- you add it without any check
while(neighbors.hasNext())
{
  neighbor = neighbors.next();
  if(!graph.isVisited(neighbor)) <- you do check for the others
  {
     add_queue.add(neighbor);
     graph.visit(neighbor);
  }
}

neighbor=neighbors.next() 需要调查的几个地方:

  • 检查以确保
    graph.isvisit()
    确实能够识别何时通过
    graph.visit()访问了节点
  • graph.neighbor(start)
    是否真正返回start的邻居?不包括在这个列表中的开始

  • 需要调查的几个地方:

  • 检查以确保
    graph.isvisit()
    确实能够识别何时通过
    graph.visit()访问了节点
  • graph.neighbor(start)
    是否真正返回start的邻居?不包括在这个列表中的开始

  • 你的代码有点不清楚。
    graph.neights
    返回的是什么

    通常,要执行BFS,您需要将当前节点的子节点添加到队列中,而不是它的邻居。因为它都进入一个队列,这将确保您以正确的顺序访问树中的每个节点。假设它是一个树而不是一个普通图,这也将确保您不会多次访问一个节点,从而允许您删除对
    isvisted
    的检查


    因此,从队列中取出下一个节点,将其所有子节点添加到队列中,访问该节点,然后重复,直到队列为空。

    您的代码有点不清楚。
    graph.neights
    返回的是什么

    通常,要执行BFS,您需要将当前节点的子节点添加到队列中,而不是它的邻居。因为它都进入一个队列,这将确保您以正确的顺序访问树中的每个节点。假设它是一个树而不是一个普通图,这也将确保您不会多次访问一个节点,从而允许您删除对
    isvisted
    的检查


    因此,从队列中取出下一个节点,将其所有子节点添加到队列中,访问该节点,然后重复,直到队列为空。

    Donnie,graph.Neights(string)为指定顶点的邻居返回迭代器。很抱歉,这是一张图表。“树遍历”对我来说是错误的。Donnie,graph.Neights(字符串)为指定顶点的邻居返回一个迭代器。很抱歉,这是一张图表。“树遍历”对我来说是错误的。我想杰克的建议解决了这个问题。堆栈上始终至少有一个顶点。在第一个循环开始时,我取出了neights.next()赋值行,以及add和visit行,结果成功了。谢谢你及时有效的帮助。我想杰克的建议解决了这个问题。堆栈上始终至少有一个顶点。在第一个循环开始时,我取出了neights.next()赋值行,以及add和visit行,结果成功了。感谢所有及时有效的帮助。