0

指定された 2D 正方形 (n*n) 偶数サイズの配列で、開始コーナーからその中心までトラバースしたい。詳細については、以下の画像をご覧ください。

ここに画像の説明を入力

私のアルゴリズムは、隅から開始し、2 つのグローバル変数をcurrentXandとして維持し、最後までcurrentY実行して中心に到達することです。以下は私の擬似コードです-loopcurrentXcurrentY

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 に答える