模板:Dijkstra 队列优化
2017-10-05 22:32
459 查看
/* Dijkstra的算法思想: 在所有没有访问过的结点中选出dis(s,x)值最小的x 对从x出发的所有边(x,y),更新 dis(s,y)=min(dis(s,y),dis(s,x)+dis(x,y)) */ #include <iostream> #include <cstdio> #include <queue> #include <vector> using namespace std; const int Ni = 10000; const int INF = 1<<27; struct node{ int x,d; node(){} node(int a,int b){x=a;d=b;} bool operator < (const node & a) const { if(d==a.d) return x<a.x; else return d > a.d; } }; vector<node> eg[Ni]; int dis[Ni],n; void Dijkstra(int s) { int i; for(i=0;i<=n;i++) dis[i]=INF; dis[s]=0; //用优先队列优化 priority_queue<node> q; q.push(node(s,dis[s])); while(!q.empty()) { node x=q.top();q.pop(); for(i=0;i<eg[x.x].size();i++) { node y=eg[x.x][i]; if(dis[y.x]>x.d+y.d) { dis[y.x]=x.d+y.d; q.push(node(y.x,dis[y.x])); } } } } int main() { int a,b,d,m; while(scanf("%d%d",&n,&m),n+m) { for(int i=0;i<=n;i++) eg[i].clear(); while(m--) { scanf("%d%d%d",&a,&b,&d); eg[a].push_back(node(b,d)); eg[b].push_back(node(a,d)); } Dijkstra(1); printf("%d\n",dis ); } return 0; }
Dijkstra:
const int INF=0x3f3f3f3f;
const int maxn=1200;
int dist[maxn],g[maxn][maxn],N;
bool vis[maxn];
void dijkstra(){
for(int i=1;i<=N;i++)
dist[i]=(i==1)?0:INF;
memset(vis,0,sizeof(vis));
for(int i=1;i<=N;i++){
int mark=-1,mindis=INF;
for(int j=1;j<=N;j++){
if(!vis[j]&&dist[j]<mindis){
mindis=dist[j];
mark=j;
}
}
vis[mark]=1;
for(int j=1;j<=N;j++){
if(!vis[j])
dist[j]=min(dist[j],dist[mark]+g[mark][j]);
}
}
}
相关文章推荐
- Dijkstra + 优先队列优化 模板
- 【原创】最短路模板 Floyd,优先队列优化dijkstra,SPFA
- uva 11374 最短路+记录路径 好题 dijkstra优先队列优化算法 邻接表法 可做模板 G++提交
- poj 1847 最短路 dijkstra模板(vector邻接表+队列优化)
- 最短路--dijkstra+优先队列优化模板
- HDU ~ 2544 ~ 最短路 (Dijkstra模板,常规版 and 优先队列优化版)
- 单源最短路模板_SPFA_Dijkstra(堆优化)_C++
- 模板 图论 Dijkstra+堆优化
- 优先队列优化的dijsktra的模板
- PriorityQueue+Dijkstra优先队列优化的Dijstra
- Dijkstra+堆优化模板 (手写堆简单易懂)
- 优先队列优化Dijkstra-hdu2066
- 刘汝佳 Dijkstra 队列优化
- UVa 658 It's not a Bug, it's a Feature! 位运算技巧+dijkstra优先队列优化
- uva10986 优先队列优化的Dijkstra
- 最短路模板[spfa][dijkstra+堆优化][floyd]
- 蓝桥杯 算法训练 最短路 【SPFA队列优化 + dijkstra优先队列优化】
- hdu1839之二分+邻接表+Dijkstra+队列优化
- Dijkstra队列优化矩阵版
- hdu2544 最短路 dijkstra的使用优先队列优化的比较