サンタクロース 🎅 は、格子状のマップで表された村でプレゼントを配らなければなりません。
マップの各セルは以下の通りです:
'S' → サンタの出発地点(プレゼントがある場所)'G' → プレゼントを受け取る家'.' → 通れる道'#' → 障害物(通ることはできません)サンタは各プレゼントに対して独立した配送を行います。'S' から出発し、家 'G' にプレゼントを届け、すぐに 'S' に戻って次のプレゼントを受け取ります。しかし、このチャレンジでは、'S' から各家 'G' までの片道の最短距離の合計のみを計算してください。
初期位置からすべてのプレゼントの家に到達するために必要な合計歩数を返す関数 minStepsToDeliver(map) を書いてください。
注意点:
'S' から出発します。'S' からその家 'G' までの最短距離を計算する必要があります。'#') を通り抜けることはできません。-1 を返さなければなりません。🧩 例
minStepsToDeliver([
['S', '.', 'G'],
['.', '#', '.'],
['G', '.', '.']
])
// 結果: 4
/*
説明:
- S (0,0) から G (0,2) までの最短距離: 2歩
- S (0,0) から G (2,0) までの最短距離: 2歩
- 合計: 2 + 2 = 4
*/
minStepsToDeliver([
['S', '#', 'G'],
['#', '#', '.'],
['G', '.', '.']
])
// 結果: -1
// (障害物により (0,2) の家に到達できません)
minStepsToDeliver([['S', 'G']])
// 結果: 1
🎯 ルール
'S' が含まれます。'G') が存在する可能性があります。'S' から独立して測定されるため、配送順序は関係ありません。🧠 ヒント
'S' から各 'G' までの最短距離を計算します(幅優先探索または BFS アルゴリズムを使用できます)。-1 になります。