百度空间 | 百度首页 
 
查看文章
 
[原]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) );
                     }
                }
           }
      }
};

类别:点滴 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu