我想在到达指定单元格后停止我的广度优先搜索功能。如何停止广度优先搜索递归函数
现在我在到达指定单元格后显示警报,但仍然访问其余节点。您可以看到此行为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
没有帮助。
你有一些失踪','。在'结束'行和'返回'后面没有';'。同样在'queue.push(child)'... – Airwavezx
thx,但它不能解决我的问题。 –
这个算法不是广度优先的,而是深度优先的,除此之外(当我谈到javascript时,我不太熟练)看起来像是异步的,当正确的函数被发现很棘手时,这会使中止。 – Paul