HDU[2066] 单源最短路dijkstra算法的优先队列nlogn优化
来源:互联网 发布:win如何打开udp端口 编辑:程序博客网 时间:2024/06/06 17:37
Dijkstra算法
为用来计算从一个点到其他所有点的最短路径的算法,是一种单源最短路径算法。
算法描述:
每次找到距离原点最近的点,并通过它对其他店进行松弛。
每次查找需要O(n) ,每次操作一个点需要O(n) 操作n个点时间复杂度为O(n^2)
由于具有优先队列,我们可以把这个查找操作复杂度降低到O(logn)
每次操作一个点需要O(n) 操作n个点时间复杂度为O(nlogn)
具体操作为:
每次找出距离原点最近的点入队列再将与它相连的点均放入队列
每次取出队首元素判断是否标记过
如果标记过则不可能再被其他点松弛
如果没有标记过则标记并用它来松弛其他点
模板题 HDU2066 http://acm.hdu.edu.cn/showproblem.php?pid=2066
先将与起点相邻的点初始化
e[0][i]=0; vis[i]=0;
之后进行 dijkstra
最后维护一下到每个目的地的最小值
注意多组数据的数据重置问题
#include<iostream>#include<queue>#include<algorithm>#define maxn 1005#define inf 99999999 using namespace std;int e[maxn][maxn];int book[maxn];int vis[maxn];int n,m;struct data{int dis;int flag;data(){} data(int a,int b){dis=a;flag=b;}friend bool operator <(data a,data b)//重载运算符{return a.dis>b.dis; }};priority_queue<data> dis;int main(){int a,b,c;int m,s,d; int flag;int ans=inf;int want[maxn]; while(cin>>m>>s>>d){for(int i=0;i<=maxn;i++)//数据重置{ for(int j=0;j<=maxn;j++){if(i==j)e[i][j]=0;elsee[i][j]=inf;}book[i]=0; }for(int i=0;i<m;i++){cin>>a>>b>>c;if(c<e[a][b])//保存最短边{ e[a][b]=c;e[b][a]=c;}}for(int i=0;i<s;i++)//将相邻点数据重置为0,表示不需要消耗时间即可到达{int s;cin>>s;e[0][s]=0;vis[s]=0;}for(int i=0;i<=maxn;i++){vis[i]=e[0][i];dis.push(data(vis[i],i));}while(!dis.empty()){int v=dis.top().flag;dis.pop(); if(book[v]==1)//判断是否该点已经松弛过其他点continue;book[v]=1;for(int k=1;k<=maxn;k++)//dijkstra核心代码 松弛+将被松弛的点放入队列{if(e[v][k]<inf){if(vis[v]+e[v][k]<vis[k]){vis[k]=vis[v]+e[v][k];dis.push(data(vis[k],k));}} } }for(int i=0;i<d;i++)//维护到每个目的地距离的最小值{cin>>want[i];ans=min(ans,vis[want[i]]);}cout<<ans<<endl;}}
阅读全文
0 0
- HDU[2066] 单源最短路dijkstra算法的优先队列nlogn优化
- hdu 2066最短路 dijkstra 及其优先队列优化
- [最短路]使用优先队列优化的Dijkstra算法
- 图论算法--单源最短路--dijkstra算法(优先队列优化)
- 优先队列优化的Dijkstra算法
- 优先队列优化的 Dijkstra算法
- hdu 2066 一个人的旅行 Dijkstra+优先队列优化
- 优先队列优化Dijkstra算法
- Dijkstra算法优先队列优化
- 优先队列优化Dijkstra算法
- 优先队列优化的Dijk单源最短路算法
- hdu 2112 最短路 dijkstra优先队列
- 优先队列Dijkstra实现最短路算法
- hdu 2112 HDU Today 优先队列优化的Dijkstra+map
- 【HDU】-2066-一个人的旅行(最短路)(dijkstra+优先队列)
- dijkstra的优先队列优化
- 最短路练习10/poj/1511 Invitation Cards ,(两次spfa),(单源最短路,优先队列优化的Dijkstra)
- PriorityQueue+Dijkstra优先队列优化的Dijkstra
- java8中的String
- RTSP转RTMP/HLS网页无插件视频直播:EasyNVR功能介绍-音频开启
- IOS 自定义tabbar,并给tabbar按钮加载网络图片
- ubuntu下配置cafe时无法链接libcudart.so.8.0的解决方案
- linux系统很卡的基本排查方法
- HDU[2066] 单源最短路dijkstra算法的优先队列nlogn优化
- poj1185——炮兵阵地
- HTAP数据库——HybirdDBforMySQL产品和典型方案介绍
- Solr 管理索引库
- 安装pip3 以及将Linux下的Python更改为3.x
- Eclipse 的 Dark 模板
- 服务器报错NoSuchMethodError解决方案
- ubuntu service 安装jdk 和mysql
- Ubuntu dash与bash的区别