查看文章 |
[原]Dijkstra以STL的priority_queue实现
2007-10-05 10:33
namespace Dijkstra //针对正权图(邻接表) { typedef int T; //权类型,须指定 const int maxn = 1000; //点的最大数,须指定 typedef pair<T, int> Ti; //T权类型,int顶点号 typedef vector<Ti>::iterator iter; vector<Ti> w[maxn]; //图,须输入 T d[maxn]; //点的最小权,输出用 //int p[maxn]; //路径,输出用 void dijkstra( int s ) //源点s { priority_queue< Ti, vector<Ti>, greater<Ti> > q; memset( d, 127, sizeof(d) ); d[s] = 0; q.push( Ti(0, s) ); while (!q.empty()) { int u = q.top().second; T du = q.top().first; q.pop(); if (d[u] != du) continue; for (iter it = w[u].begin(); it != w[u].end(); ++it) { int v = it->second; T dv = du + it->first; if (d[v] > dv) { d[v] = dv; //p[v] = u; q.push( Ti(dv, v) ); } } } } }; |
最近读者: