Dijstra_优先队列_前向星

Dijstra算法求最短路径

具体实现方式

  1. 设置源点,将源点从原集u{}中取出并放入新建集s{}
  2. 找出至源点最近的点q从原集取出放入新集s{}
  3. 由q点出发,更新所有由q点能到达的仍处于原集的点到源点的距离(取最短)
  4. 选择距离源点最近的唯有原集的点,并重复步骤3
  5. 直至找到终点或者原集中无点的存在

优先队列

定义与重载运算符

  1. 默认优先级
    • 借助<操作符,整数元素中,大的优先级高
  2. 传入比较结构体
    • 通过传入不同类型的数据来定义不同类型的优先级,重载()运算符
    • 优先队列第三个参数代表!cmp,来判断队列优先级
struct cmp{
    bool operator()( int a, int b){
        return a>b;
    }
}

priority_queue< int, vector<int>, cmp > q;
  1. 通过自定义数据结构定义优先级,在结构体中重载<运算符
struct Node{
    int v;
    int w;
    int next;
    bool operator < (const Node &a ) const{
        return a.w<w;    //按w从小到大排序
    }
}edge[maxn];

priority_queue<Node>q;

链式前向星

见旁边链接[链式前向星]<https://www.cnblogs.com/konoba/p/11351025.html>

猜你喜欢

转载自www.cnblogs.com/konoba/p/11365650.html
今日推荐