0

在给定的 2D 正方形 (n*n) 偶数大小数组中,我想从起始角遍历到其中心。下面是更多信息的图像。

在此处输入图像描述

我的算法是从角落开始,维护两个全局变量,并currentX运行currentY一个loop直到到达中心。下面是我的伪代码-currentXcurrentY

x=0
y=0
currentX=0
currentY=0
while(currentX != centerX and currentY != centerY){
currentX=travel_in_x_plus_direction(x,n);
currenty=travel_in_y_plus_direction(y,n);
currentX=travel_in_x_minux_direction(currentX,x);
currentY=travel_in_y_minux_direction(currentY,y-1);
n--;
x--;
y--;
}

The function travel_in_x_plus_direction(currentX) traverse the array starting from currentX till x and returns the final value of x. The same concept applies for rest of the functions also.

这是正确的方法吗?有没有更好的方法以同样的方式遍历它?

4

1 回答 1

1

伪代码“使用编程语言的结构约定,但旨在供人类阅读而不是机器阅读。” ( http://en.wikipedia.org/wiki/Pseudocode ) 我建议编写符合此定义的伪代码将对您大有裨益,并帮助您思考如何解决问题。

你的算法

似乎表明你是

  • 检查你是否在你的目标“END”,如果你不是
    • 向右移
    • 下移
    • 向左移动
    • 提升

这意味着您将永远无法到达任何地方。

解决方案的起点

我的容器大小为 n*n,因此最初边界为 n*n,如果我穿过一个单独的正方形,它将成为边界的一部分。

路径很简单,首先向右移动,然后在遇到障碍时改变方向。方向顺序是右、下、左、上的顺序,直到达到目标。

HorizontalMax = n (the right wall)
HorizontalMin = 0 (the left wall)
VerticalMax = n (the bottom wall)
VerticalMin = 0 (the top wall)

While not at goal
  While not at right boundary or goal
    Move right
  Increment VerticalMin (you just moved along the top wall)
  While not at bottom boundary or goal
    Move down
  Decrement HorizontalMax (you just moved along the right wall)
  While not at left boundary or goal
    Move left
  Decrement VerticalMax (you just moved along the bottom wall)
  While not at top boundary or goal
    Move up
  Increment HorizontalMin (you just moved along the left wall)
End
于 2013-02-22T04:43:26.830 回答