最短路--dijkstra+优先队列优化模板
2015-04-24 20:10
429 查看
不写普通模板了,还是需要优先队列优化的昂
#include<stdio.h> //基本需要的头文件 #include<string.h> #include<queue> #include<algorithm> #include<vector> using namespace std; typedef pair<int,int> pii; const int INF=0x3f3f3f3f; const int maxn=1e5+5; const int maxm=1e5+5; int head[maxn],nxt[maxm<<1],val[maxm<<1],point[maxm<<1],size; int dis[maxn]; void init(){ memset(head,-1,sizeof(head)); size=0; } void add(int a,int b,int v){ //若有向图则只需要前一半 point[size]=b; val[size]=v; nxt[size]=head[a]; head[a]=size++; point[sise]=a; val[size]=v; nxt[size]=head[b]; head[b]=size++; } struct cmp{ //将优先队列改为小根堆 bool operator()(pii a,pii b){ return a.first>b.first; } }; void dij(int s,int t){ //传入出发点和到达点 int i; priority_queue<pii,vector<pii>,cmp>q; q.push(make_pair(0,s)); memset(dis,0x3f,sizeof(dis)); dis[s]=0; while(!q.empty()){ pii u=q.top(); q.pop(); if(u.first>dis[u.second])continue; for(i=head[u.second];~i;i=nxt[i]){ int j=point[i]; if(dis[j]>u.first+val[i]){ dis[j]=u.first+val[i]; q.push(make_pair(dis[j],j)); } } } printf("%d\n",dis[t]); //或去掉在主函数中输出或操作 }
相关文章推荐
- uva 11374 最短路+记录路径 好题 dijkstra优先队列优化算法 邻接表法 可做模板 G++提交
- HDU ~ 2544 ~ 最短路 (Dijkstra模板,常规版 and 优先队列优化版)
- 【原创】最短路模板 Floyd,优先队列优化dijkstra,SPFA
- Dijkstra + 优先队列优化 模板
- hdu 2066最短路 dijkstra 及其优先队列优化
- 最短路练习10/poj/1511 Invitation Cards ,(两次spfa),(单源最短路,优先队列优化的Dijkstra)
- poj 1847 最短路 dijkstra模板(vector邻接表+队列优化)
- POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
- dijkstra 优先队列最短路模板
- hdu-2544-最短路(Dijkstra + Dijkstra优先队列 + Bellman-ford + SPFA +Floyd) 纯模板题
- POJ1724 ROADS(深搜DFS,最短路,dijkstra,用优先队列优化)
- 优先队列优化的求最短路和次短路条数以及长度的模板
- usaco2.4 comehome 最短路 Floyd, Dijkstra, Dijkstra优先队列优化
- 蓝桥杯 算法训练 最短路 【SPFA队列优化 + dijkstra优先队列优化】
- hdu2544 最短路 dijkstra的使用优先队列优化的比较
- 最短路模板[spfa][dijkstra+堆优化][floyd]
- 【最短路】【负圈可达点】【用while(!Q.empty())】【优先队列优化】【dij】
- hdu 2112 HDU Today 优先队列优化的Dijkstra+map
- Dijkstra算法优先队列优化
- 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain