アットウィキロゴ

[Algorithm]Prim's algorithm

与えられたグラフの最小全域木を求める方法。priority_queueを使えばo(|E|log|V|)。

[手順]
1,適当な点を始点として取る

2,そこから到達可能な点のうち、最小コストのものを
到達済み集合に加える

3,すべての頂点に到達済みならば終了、そうでなければ2へ

[実装例]
0072にて使用

 q.push(node(0,0));                    //始点として頂点0を取る、コストは0
 while(!q.empty()){
   node tmp = q.top(); q.pop();
   if(used[tmp.num] == true) continue; //popしたvが到達済みなら捨てる
   used[tmp.num] = true;               //到達済みにする
   ret += tmp.cost;                    //コストを加える
   for(int i=0;i<n;i++){
     if(cost[tmp.num][i] != INF){      //加えた頂点から到達可能な頂点と、そのコストをPQにpush
q.push(node(cost[tmp.num][i], i));
     }
   }
 }
最終更新:2011年06月19日 00:51
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。