繁体   English   中英

Java 广度优先搜索 - 8 滑块

[英]Java Breadth First Search - 8 Slider

问题是,广度优先搜索需要对 9 个值的板数组进行排序。 1,2,3,4,5,6,7,8,0..为了,被告知不要修改大部分现有代码,并在众多类文件中添加BFS等语句。 运行时间给出 1,2,5,3,4,8,6,7,0。 它正在正确移动 0,但至于路径,不确定要向现有代码添加什么以解决此问题,以便路径和数字解析。


  while (!frontier.isEmpty()) {
    cur = frontier.remove();
    if (cur.isGoal()) {
      return cur;
    } else if (cur.getDepth() < 15) {
      visited.add(cur);
      for (Node s : cur.expand()) {
        if (!visited.contains(s)) {
          s.setParent(cur);
          s.setDepth(cur.getDepth() + 1);
          frontier.add(s);
          numNodesExplored++;
        }
      }
    }
  }
    return null;

您在评论中提到您对像1, 2, 3, 4, 5, 6, 7, 8, 0这样的输出进行了切面。 这对于runBFS方法是runBFS 当您查看方法签名Node runBFS(Node start)您可以看到此方法返回一个Node而不是节点列表。

除此之外,您还有一个逻辑错误。 在娄代码块,你可以看到你添加到Node s他的父母给s 换句话说: s是他自己的父母。

if (!explored.contains(s)) {
    s.setParent(s);   // here you add the wrong parent - it should be s.setParent(cur)
    s.setDepth(cur.getDepth() + 1);
    frontier.add(s);
    numNodesExplored++;
}

只需将该行更改为s.setParent(cur) cur是你正在寻找他的兄弟Node

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM