短絡ソルバーをk個:
K =短絡単一ソース最短ロードレース裏側高度な検索+ A *
*アルゴリズムは、ある 形式手法と経験則の組み合わせ。
図は、動的に大きくされている検索の数を決定し活用することで、所与のヒューリスティック情報低減します。
唯一の数学的形式を解析することによって与えられた情報を用いずに図フォーマル方法。
アルゴリズムのアイデア:
図中の1つの推定アルゴリズム関数f(H)によって現在の点Pの端部までの距離を推定し、したがってその探索方向を決定します。
このパスに障害が発生した場合、それは別のパスをしようとします。
*、評価関数の現在の値=現在位置+エンドポイントまでの距離、即ち、F(P)= G(P)+ H(P)のために、それぞれが最小の評価関数値を拡張し、
最短パスアルゴリズムがp秒から電流経路のK、G(P)であるために長さを移動する、H(p)がTの最短の長さと、点Pです。
有意F(P)を、移動する方法遠くの少なくとも合計端への電流経路に応じて、P S Tから行っています。
計算、H(P)をスピードアップするために、Aの前に前処理する必要がある*サーチ、最短パスはH(P)の各点について求めることができる単一のソースを行うエンドポイントTから。
アルゴリズムのステップ:
(1) 、元の終点tが解決、ソース点であるT(すなわち:すべての点の最短距離を再度最短ラン)。
(2)作成プライオリティキューを、ソースSは、キューに追加されます。
(3) 、中優先度キューからポップ-F(p)の最小距離 tは、tはチームの数が算出される場合、点Pのは、点pです。
電流がある場合のt k番目のデキュー長、電流パスはk番目に短い長さをtにS、アルゴリズムは終了します。
そうでない場合はプライオリティキューに隣接点P情報に出て拡張するPに接続されたすべてのエッジを横切ります。
コード:
構造体B { LL X、T、 B(X LL、LL T):X(X)、T(T){} 友人BOOLの 演算子 < (BのAA、BB B)は{ 返す aa.t DIS + [aa.xを]> + bb.t ; DIS [bb.x] // プライオリティキュー、DIS終点前処理最短のための出発点として } }; LL ASTAR()// 記事を探しているA * kエッジ { IF(DIS [S]を> = INF) リターン - 1。; PRIORITY_QUEUE <B> Q; BのRe(S、0 ); int型 NUM = 0 ; q.push(RE); ながら(! q.empty()) { 再 = q.top()。 q.pop(); もし(re.x == E) { NUM ++ 。 もし(NUM == k)は// 找到第kの条路 返しre.t。 } のために(int型 I = PRE2 [re.x];〜I; I = a2の[I] .next)// 进队 { q.push(B(A2 [I] .Y、A2 [I] .LEN + re.t)); } } リターン - 1 。 }