[英]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.