dijkastra 基于优先队列

来源:互联网 发布:数据库分组统计 编辑:程序博客网 时间:2024/06/04 21:08
#include<cstdio>#include<iostream>#include<vector>#include<map>#include<set>#include<queue>#include<deque>#include<cstring>#include<string>#include<algorithm>using namespace std;struct Pair{int x,y;Pair(){}Pair(int one,int two){x=one,y=two;}bool operator <(const Pair& other) const{if(y>other.y||(y==other.y&&x<other.x)) return true;return false;}};int n,m;vector<Pair> vec;vector<int> a[100];void dijkstra(){priority_queue<Pair> q;q.push(Pair(1,0));bool use[100];memset(use,0,sizeof(use));int dis[100];memset(dis,127,sizeof(dis));dis[1]=0;while(!q.empty()){Pair s=q.top();q.pop();use[s.x]=true;for(int i=0;i<a[s.x].size();i++){Pair k=vec[a[s.x][i]];if(!use[k.x]&&k.y+s.y<dis[k.x]){dis[k.x]=k.y+s.y;q.push(Pair(k.x,dis[k.x]));}}}printf("%d\n",dis[n]);}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);vec.push_back(Pair(y,z));a[x].push_back(vec.size()-1);}dijkstra();return 0;}