A* アルゴリズムを使用する必要がある課題に取り組んでいますが、その方法がわかりません。
(0,0)
割り当ては、郵便配達員がグリッド マップ上の小包を無限遠から送ることを想像してください。彼は 1 日の初めにタスクのリストを作成し、各タスクには開始点(x1,y1)
と終了点が割り当てられています(x2,y2)
。2 つのタスクを同時に処理することはできないため、1 つのタスクを終了して終点から次の始点に移動するときに、1 日全体の移動距離が最小になるように、それらのタスクを調整する必要があります。 . 距離は であるマンハッタン距離として計算されd(x1,y1,x2,y2) = abs(x2 - x1) + abs(y2 - y1)
ます。
サンプル入力:
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)
出力例:
n nodes explored
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
私の見解では、グラフ(またはマップ)がここで言及されていますが、距離を簡単に計算できるように、それらのタスクを最小限に並べ替えることが重要な部分のみであるため、必要ありません。愚かなことは順列であり、コストが最も低いものを選択しますが、それを採用することはありません。Greedy も試しましたが、グローバルな最適解が得られない可能性があります。
問題は、A* アルゴ以来です。はパス検索用に設計されていますが、正しい方法を見つけるというこの問題に、それまたはそのバリエーションをどのように適用できますか?