-1

假设我有以下网格:

网格轮廓 0,0 .. 3,5

我似乎无法弄清楚如何使用从左下角开始的 for 循环来导航它。单元格的顺序应该是

0,5 => 0,4 => 1,5 => 1,4 => 0,3 => 2,5, => 1,3 => 2,4 => 2,3...

另一种可视化方式:

(1) 0,5 => 
(2) 0,4 => (1,5) (1,4)
(3) 0,3 => (2,5) (1,3) (2,4) (2,3)
(4) 0,2 => (3,5) (1,2) (3,4) (2,2) (3,3) (3,2)

所以这是我看到的模式:

  1. 要开始每个循环,取前面的循环值 (x,y) 并将其设为 (x, y-1)
  2. 于是出现了这样的模式: (+1, y) (x,-1) (+1, y) (x, -1) ,因此您可以提取旧值并交替增加 x 和减少 y。

for 循环是这个工作的错误工具吗?

是否有一个聪明的算法可以做到这样我不必提取以前的值并且可以计算它们?我在这里吠叫错误的树吗?我应该以不同的方式处理它(正确吗?)?

编辑:

这是绘制路径的尝试。不确定这是否更有意义:

在此处输入图像描述

这个想法是从第一个单元格的左下角开始的。上一个单元格,然后在它们形成直角时交替。形成完整的直角后,向上一个单元格并交替形成一个新的直角。

4

1 回答 1

1

可能的解决方案,针对非方形网格进行了编辑:

for(startY = maxY, startY >= 0; startY++)
{
    x1 = 0;
    y1 = startY;
    x2 = 5 - startY;
    y2 = 5;

    while(!(x1 == x2 && y1 == y2))
    {
        if(x1 <= maxX)
            //Point 1 is x1, y1

        if(y2 >= 0)
            //Point 2 is x2, y2

        x1++;
        y2--;
    }

    if(x1 <= maxX)
        //Final point is x1, y1
}

因此,您在 while 循环的每次迭代中计算两个点,并在路径的该部分的其余点之后通过 for 循环的每次迭代计算最后一个对角点。

于 2012-05-28T07:47:01.607 回答