我正在寻找一种算法,该算法可以探索整个网格(不包括相邻单元格)。
图片显示我所在的位置是绿色的斑点,我看到的是蓝色的斑点。现在,我想访问网格上的每个单元(“看到”每个单元)。这意味着我想移动的方式是不必移动到每个单元格,而跳过相邻的单元格。
是否有类似算法的名称,或者在这里可以推荐什么?请注意,网格可以是任意大小,任意数量的单元格,约束条件保持不变:我总是可以“看到”相邻的单元格。
答案 0 :(得分:1)
我猜最接近的术语是填充/跨距? 在您的情况下,请踩1并大步3。
for(var i = 1; i<n; i+=3){
for(var j = 1; j<m; j+=3){
//visit your cell
}
}
如果您没有3行/列的倍数,则可能会出现问题。
当您向右迭代时,请考虑各种情况(网格宽度不同)。 x是一个单元格。 O是一个您将在上面循环访问的单元格
...xxxxxx
...xOxxOx <-- ok you can see everything
...xxxxxx
...xxxxx
...xOxxO <-- ok you can see everything
...xxxxx
...xxxx
...xOxxF <-- ko you are out of bounds and should have taken the "first" column
...xxxx
当grid.width%3 = 1时出现ko情况
所以您可以单独处理
for(var i = 1; i<n; i+=3){
for(var j = 1; j<m; j+=3){
//visitCell(i,j)
}
}
if(n%3 == 1){
for(var j = 1; j<m; j+=3){
visitCell(n-1,j);
}
}
if(m%3 == 1){
for(var i = 1; i<n; i+=3){
visitCell(i,m-1);
}
}
if(m%3 == 1 && n%3 == 1){
visitCell(n-1,m-1);
}