如何导航网格

时间:2012-05-28 07:26:21

标签: algorithm graph graph-algorithm

假设我有以下网格:

Grid Outline 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随着减少收率
  3. for循环是否是这项工作的错误工具?

    是否有一个聪明的算法可以这样做我不必拉出前一个值并且可以计算它们?我在这里咆哮错误的树,我应该采用不同的方法(正确吗?)?

    修改

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

    enter image description here

    这个想法从第一个细胞的左下角开始。上升一个单元格,然后交替,因为它们形成一个直角。形成完整的直角后,向上移动一个单元并交替形成一个新的直角。

1 个答案:

答案 0 :(得分: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循环每次迭代计算最后一个对角点。