- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
您好,我正在尝试在 javascript 中实现一个简单的洪水填充类型算法。基本上我有一个 3x3 板,我将其表示为一维数组。我想将每个“接触”的相等值的索引附加到一个单独的数组。因此,例如这个板:
[1][1][0]
[3][1][3]
[0][0][0]
将表示为一维数组,即 [1,1,0,3,1,3,0,0,0]。在 [1] 之一上运行 floodFill 后,它会产生一个类似于 [4, 1, 0] 的数组,因为这些是 1d 数组中接触的索引,它们具有相同的值。
代码如下:
var boardArray = new Array(1,1,0,3,1,3,0,0,0);
var comboArray = new Array();
function floodFill(n, diceVal) {
if(boardArray[n] != diceVal) {
return;
}
comboArray.push(n);
if (n >0 && n < 8) {
// right
if(!(n%3==2)) {
floodFill(n+1, diceVal);
}
// left
if(!(n%3==0)) {
floodFill(n-1, diceVal);
}
// up
if(n>2) {
floodFill(n-3, diceVal);
}
// down
if(n<5) {
floodFill(n+3, diceVal);
}
} else {
return;
}
}
floodFill(4,1);
谁能告诉我为什么会陷入无限循环?
最佳答案
在“向上”的情况下,第一次通过时,您将调用 floodFill(1,1);
。该调用在其“关闭”情况下将调用 floodFill(4,1);
,后者将很快调用 floodFill(1,1)
您已经在跟踪匹配的方 block - 唯一真正会造成麻烦的方 block 。只需确认您没有再次检查同一个方 block :
function floodFill(n, diceVal) {
if(boardArray[n] != diceVal) {
return;
}
// have we been here before?
if (comboArray.indexOf(n) >= 0)
return;
comboArray.push(n);
// ...
}
关于Javascript 洪水填充算法陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25097932/
我有一个 3D 数组。在这个数组中,我想找到可以组合成更大元素的元素。矩形不能相互重叠。我最好先找到最大的矩形,但先到先得也不会错,尤其是在提高性能的情况下。 例如 1 0 0 0 1 0 0 0 0
这是使用 D3.js 和 topojson 的洪水 map 示例。 http://bl.ocks.org/cappelaere/6472064 https://gist.github.com/capp
首先声明一下,我不是 DevOp,所以我在 Linux 管理方面的经验有限。 我基本上遵循了这个操作方法 (https://cloud.google.com/monitoring/agent/inst
这不是出于黑客目的。我正在学习计算机科学,我只是好奇。 所以..当主机A向主机B发送TCP SYN时,主机B为接收缓冲区等分配空间,向主机A发送回SYNACK,主机A也分配这样的空间,然后向主机B发送
我正在使用这个插件 https://github.com/mozilla/rust-android-gradle ,这需要我添加 tasks.whenTaskAdded { task -> i
我是一名优秀的程序员,十分优秀!