头文件
#include<queue>
声明:
priority_queue<T> pq;
priority_queue<T, vector<T>, cmp> pq;
第一种是默认的,第二种则自己定义,第一个参数是数据类型,第二个参数是储存结构,第三则是优先顺序,默认是less
我们可以改为greater<T>
priority_queue<T, vector<T>, greater<T>> pq;
当然,也可以在定义类的时候就顺便把顺序给定义了:
class hahaha
{
int locate;
char name[20];
bool operator < (hahaha &a) const
{
return locate > a.locate;
}
};
顺便贴一个dijkstra的优先队列优化
#include<bits/stdc++.h>
using namespace std;
#define INF 1<<27
int d[100];
int n;
struct node{
int x;
int d;
node(int a,int b){x=a;d=b;};
bool operator < (const node & a) const{
return d>a.d;
}
};
vector<node> mp[100];
void Dijkstra(int s){
for(int i=0;i<=n;i++) d[i]=INF;
d[s]=0;
priority_queue<node> q;
q.push(node(s,d[s]));
while(!q.empty()){
node now = q.top();
q.pop();
for(int i=0;i<mp[now.x].size();i++){
node next = mp[now.x][i];
if(d[next.x]>now.d+next.d){
d[next.x]=now.d+next.d;
q.push(node(next.x,d[next.x]));
}
}
}
}
int main(){
int a,b,dis,m;
while(scanf("%d%d",&n,&m),n+m)
{
for(int i=0;i<=n;i++) mp[i].clear();
while(m--)
{
scanf("%d%d%d",&a,&b,&dis);
mp[a].push_back(node(b,dis));
mp[b].push_back(node(a,dis));
}
Dijkstra(1);
cout<<d[n]<<endl;
}
return 0;
}