【发布时间】:2018-02-18 05:50:43
【问题描述】:
我想在到达指定单元格后停止广度优先搜索功能。
现在我在到达指定单元格后显示一个警报,但仍会访问剩余的节点。你可以看到这种行为here(请选择广度优先搜索)。
function drawBreadthFirstSearch(current, start, last, queue, animation_speed) {
setTimeout(function () {
if (queue.length >= 0) {
current = queue.shift();
if (current !== last) {
current.color = "#c6e0b4";
current.changeColor();
} else {
alert('The end!')
return
}
var childs = checkNeigbors(current.i, current.j)
if (childs) {
childs.forEach(function (child) {
if (child.visited === false) {
child.color = "green";
child.changeColor();
queue.push(child)
child.visited = true;
drawBreadthFirstSearch(current, start, last, queue, animation_speed)
}
});
}
}
}, animation_speed);
}
函数checkNeigbors 返回单元格数组。
将forEach 更改为for 没有帮助。
【问题讨论】:
-
您缺少一些
;。在“结束”行和之后的return中没有;。同样在queue.push(child)... -
谢谢,但它不能解决我的问题。
-
这个算法不是广度优先的,而是深度优先的,除此之外(我对 javascript 并不完全精通)看起来它是异步的,这会在正确时中止发现函数很棘手。
-
@Paul,它是广度优先的(不要被你应该首先选择“广度优先”的链接误导)。
-
@NikitaYunoshev,作为旁注,我不认为当前动画与深度优先动画进行公平比较。对于广度优先,您可以同时为处于同一级别的所有节点设置动画,而在深度优先中,您可以一个一个地很好地显示每个访问过的节点。我认为广度优先应该是一样的。这是你想要还是不想要的东西?
标签: javascript algorithm search