Dijstra算法求最短路径
具体实现方式
- 设置源点,将源点从原集u{}中取出并放入新建集s{}
- 找出至源点最近的点q从原集取出放入新集s{}
- 由q点出发,更新所有由q点能到达的仍处于原集的点到源点的距离(取最短)
- 选择距离源点最近的唯有原集的点,并重复步骤3
- 直至找到终点或者原集中无点的存在
优先队列
定义与重载运算符
- 默认优先级
- 传入比较结构体
- 通过传入不同类型的数据来定义不同类型的优先级,重载()运算符
- 优先队列第三个参数代表!cmp,来判断队列优先级
struct cmp{
bool operator()( int a, int b){
return a>b;
}
}
priority_queue< int, vector<int>, cmp > q;
- 通过自定义数据结构定义优先级,在结构体中重载<运算符
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>