すべての配送を完了するための最短経路を計算できるプログラムを作成する必要があります。マップは x、y 座標として表され、パスはマンハッタン距離を使用して計算されます (つまり、x に沿って、次に y に沿って進みます)。開始点は常に (0, 0) であり、クーリエは任意の点で終了できます。宅配業者は一度に 1 パケットしか持ち込めません。
これは A* 検索アルゴリズムを使用して実装できます。私の質問は、A* アルゴリズムは私が作成した検索であるため、statusNode のヒューリスティック値を知る必要があるということです。この問題の適切なヒューリスティック実装は何ですか? それとも、ヒューリスティック値のアイデアですか?
サンプル入力があります:
Job 3 3 to 5 3 # there is a job from (3,3) to (5,3)
Job 1 1 to 9 2 # there is a job from (1,1) to (9,2)
Job 3 5 to 2 7 # there is a job from (3,5) to (2,7)
Job 5 5 to 5 7 # there is a job from (5,5) to (5,7)
そして出力:
Cost = 31
Move from 0 0 to 1 1
Carry from 1 1 to 9 2
Move from 9 2 to 3 3
Carry from 3 3 to 5 3
Move from 5 3 to 5 5
Carry from 5 5 to 5 7
Move from 5 7 to 3 5
Carry from 3 5 to 2 7
私の現在の検索方法は次のとおりです。
jobToBeDone と jobDone のリストがあります
現在位置の初期値を初期化します 0, 0
すべてのジョブが完了したかどうかを確認する
そうでない場合は、残りのすべてのジョブについて、合計コスト = そこに到達するためのパス + ジョブのヒューリスティック値を計算します。
それらをjobsToBeDoneに入れ、最短パスでソートするとインデックスが低くなります(JavaのpriorityQueueのように)。
現在の位置を最初のインデックスのジョブに更新することにより、2 番からの命令を繰り返します。