触発さ我々の塔は、ホッピングんとに関連した2D迷路マイナス1D
前書き
あなたの仕事は、指定されたルールに従って配列迷路から抜け出すための最短経路を見つけることです。
チャレンジ
n個の要素を持つ1D配列aは、n 個の点で構成される迷路と見なすことができます。インデックスkの点は、一方向にk + a [ k ]およびk - a [ k ] の点に接続されます。つまり、インデックスkのポイントからa [ k ]ステップだけ正確に前後にジャンプできます。配列の境界外のインデックスを持つポイントは、迷路外と見なされます。
これを説明するために、次の配列を検討してください。
[0,8,5,9,4,1,1,1,2,1,2]
現在5番目の要素にいる場合、要素は4であるため、9番目の要素まで4ステップ進むか、1番目の要素まで4ステップ戻ることができます。後者の場合、要素0になります。これは、それ以上移動できないことを示します。前者を実行すると、9番目の要素が2であるため、11番目の要素(再び2)にホップすることを選択できます。その後、「13番目の要素」に再びホップできます。配列し、迷路への出口と見なされます。
したがって、真ん中の要素から開始する場合、迷路から抜け出すための1つの方法は、1ステップ戻る、4ステップ進む、2ステップ進む、そして再び2ステップ進むこと[-1,4,2,2]
です。これは配列として表すことができます。または[4,8,10,12]
、すべての中間点と最終点のゼロベースのインデックスを記録する配列(1ベースのインデックスでも問題ありません)、または単に記号で表現できます[-1,1,1,1]
。
低指数の端から迷路を脱出することも大丈夫です。
最初の表記を使用して同じ要素から開始すること[1,1,1,2,2]
も解決策ですが、4つではなく5つのステップがあるため最適ではありません。
タスクは、配列の迷路から抜け出すための最短パスを見つけ出し、パスを出力することです。最適なパスが複数ある場合は、それらの一部またはすべてを出力できます。解決策がない場合は、有効なパスから識別可能な偽の値を選択して出力する必要があります(出力をまったく生成しなくてもかまいません)。
簡単にするために、配列内の要素の数は常に奇数であり、常に真ん中の要素から始めます。
テストケース
テストケースはさまざまな形式の出力を示していますが、これらに限定されません。
Input
Output
[0,8,5,9,4,1,1,1,2,1,2]
[-1,4,2,2]
[2,3,7,1,2,0,2,8,9]
[2,9] (or [2,-5] or [[2,9],[2,-5]])
[0,1,2,2,3,4,4,4,3,2,2,3,0]
[1,-1,1,1]
[0,1,2,2,4,4,6,6,6,6,6,4,2,1,2,2,0]
[]
スペック
[1,1,1,-1]
なく[-1,1,1,1]
?
[0,8,5,9,4,1,1,1,2,1,2]
、出力中[[-1,4,2,2]]
)