基于与某个像元的接近度而在NxN个栅格像元上循环

问题描述 投票:0回答:1

我有一个N x N网格。我有一个标有0的网格单元:

checkered board

我打算按0单元的顺序依次遍历网格单元:

  • 以标有0的单元格开始
  • 下一个单元格标记为1
  • 下一个单元格标记为2
  • ...
  • 直到到达网格边界

如何构成循环?


我试图遵循这样的post。但我无法适应我的情况。

algorithm loops language-agnostic nested-loops
1个回答
0
投票

所有标记为1的像元的属性是,两个轴上的最大距离等于1,如果像元(x,y)的像元(x0,y0)在像元(x0,y0)上,则每个像元都相同。将等于max(| x-x0 |,| y-y0 |)

因此,要遍历所有标签,我们可以使用像这样的东西:

for (l = 0 -> min(x0, y0, N - x0, N - y0) + 1:
  for (x = x0 - l -> x0 + l)
     #checking cell (x, y0 - l)
  for (y = y0 - l -> y0 + l)
     #checking cell (x0 + l, y)
  for (x = x0 + l - 1 -> x0 + l)
     #checking cell (x, y0 + l)
  for (y = y0 - l -> y0 + l)
     #checking cell (x0 - l, y)
  #checking cell (x0 - l, y0 + l)

如果您不在乎对相邻单元格进行迭代,则可以合并在x和y上迭代的循环。

ps:假定循环范围在开始时关闭,在结束时打开。即(x = a-> b)表示范围(a,a + 1,...,b-1)

© www.soinside.com 2019 - 2024. All rights reserved.