标签:
不写普通模板了,还是需要优先队列优化的昂
1 #include<stdio.h> //基本需要的头文件
2 #include<string.h>
3 #include<queue>
4 #include<algorithm>
5 #include<vector>
6 using namespace std;
7 typedef pair<int,int> pii;
8 const int INF=0x3f3f3f3f;
9
10
11 struct cmp{ //将优先队列改为小根堆
12 bool operator()(pii a,pii b){
13 return a.first>b.first;
14 }
15 };
16
17 void dij(int s,int t){ //传入出发点和到达点
18 int i;
19 priority_queue<pii,vector<pii>,cmp>q;
20 q.push(make_pair(0,s));
21 memset(dist,-1,sizeof(dist));
22 dist[s]=0;
23 while(!q.empty()){
24 pii u=q.top();
25 q.pop();
26 if(u.first>dist[u.second])continue;
27 for(i=head[u.second];~i;i=next[i]){
28 int j=point[i];
29 if(dist[j]==-1||dist[j]>u.first+val[i]){
30 dist[j]=u.first+val[i];
31 q.push(make_pair(dist[j],j));
32 }
33 }
34 }
35 printf("%d\n",dist[t]); //或去掉在主函数中输出或操作
36 }
标签:
原文地址:http://www.cnblogs.com/cenariusxz/p/4454381.html