チャレンジ
グリッドサイズ、障害物の位置、プレイヤーの位置、ターゲットの位置を考えると、プレイヤーがターゲットに到達し、同時に障害物を回避するためのパスを見つけることが必要です。
入力
- N:グリッドサイズ
N x N
- P:プレイヤーの位置
[playerposx, playerposy]
- T:ターゲットの位置
[targetposx, targetposy]
- O:障害物の位置
[[x1, y1], [x2, y2],...,[xn, yn]]
出力
パス:パスプレーヤーはターゲットに到達するために使用できます[[x1, y1], [x2, y2],...,[xn, yn]]
ルール
- ポイント
[0,0]
はグリッドの左上隅にあります。 - プレイヤーの位置は常にグリッドの左側になります。
- ターゲットの位置は常にグリッドの右側になります。
- グリッドには常に少なくとも1つの障害があります。
- プレーヤーまたはターゲットの位置に障害物が重なっていないと想定できます。
- 必ずしも最小パスを見つける必要はありません。
- プレイヤーは、左、右、上、下のみを斜めに移動することはできません。
- 任意の便利な方法で入力を取得できます。
- プレイヤーがターゲットに到達するためのパスは常に存在すると仮定できます。
- 明らかに、入力ごとに複数の有効なパスが存在するため、1つを選択します。
N > 2
グリッドが少なくともであると仮定し3 x 3
ます。
例
入力:9
、[6, 0]
、[3, 8]
、[[0, 5], [2, 2], [6, 4], [8, 2], [8, 7]]
可能な出力:[[6, 0], [6, 1], [6, 2], [6, 3], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [4, 8], [3, 8]]
入力:6
、[1, 0]
、[3, 5]
、[[1, 2], [2, 5], [5, 1]]
可能な出力:[[1, 0], [1, 1], [2, 1], [2, 2], [2, 3], [2, 4], [3, 4], [3, 5]]
注意
これX
は行と列のY
ためです。それらを画像内の座標と混同しないでください。
編集
@digEmAllが指摘したように、ルール#2
と#3
、playerY = 0
およびのためtargetY = N-1
です。そのため、必要に応じて、入力としてのみplayerX
とand targetX
を使用できます(コードが短くなる場合)。