hdu 1874 dijkstra 队列实现 比数组高效特别在稀疏图
参考 http://blog.csdn.net/zhuyingqingfen/article/details/6370561
刘汝佳白皮书
#include<stdio.h>
#include<queue>
#include<iostream>
#include<vector>
using namespace std;
#define N 2100
#define inf 1000000000
int n,m;
struct node {
int u,v,w,next;
}bian[N];
int yong,head[N];
void creat(int u,int v,int w) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void Dcreat(int u,int v,int w) {
creat(u,v,w);
creat(v,u,w);
}
int dijkstra(int u,int end) {
int dis[N],i,j,visit[N];
memset(visit,0,sizeof(visit));
for(i=0;i<n;i++)
dis[i]=inf;
dis[u]=0;
typedef pair<int ,int >p;//pair 定义了自己的排序规则--先比较第一维,相等才比较第二维
priority_queue<p,vector<p>,greater<p> >q;
q.push(make_pair(dis[u],u));
while(!q.empty()) {
p cur=q.top();
j=cur.second;
q.pop();
if(visit[j])continue;
visit[j]=1;
for(i=head[j];i!=-1;i=bian[i].next)
if(dis[bian[i].v]>dis[j]+bian[i].w) {
dis[bian[i].v]=dis[j]+bian[i].w;
q.push(make_pair(dis[bian[i].v],bian[i].v));
}
}
if(dis[end]<inf)
return dis[end];
return -1;
}
int main() {
int i,j,a,b;
while(scanf("%d%d",&n,&m)!=EOF) {
yong=0;
memset(head,-1,sizeof(head));
while(m--) {
scanf("%d%d%d",&a,&b,&j);
Dcreat(a,b,j);
}
scanf("%d%d",&a,&b);
printf("%d\n",dijkstra(a,b));
}
return 0;
}
//定义结构体优先队列
#include<stdio.h>
#include<queue>
#include<iostream>
#include<vector>
using namespace std;
#define N 2100
#define inf 1000000000
int n,m;
struct node {
int u,v,w,next;
}bian[N];
int yong,head[N];
void creat(int u,int v,int w) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void Dcreat(int u,int v,int w) {
creat(u,v,w);
creat(v,u,w);
}
struct nodee {
int len,v;
friend bool operator<(nodee a,nodee b) {
if(a.len!=b.len)
return a.len>b.len;
return a.v>b.v;
}
};
int dijkstra(int u,int end) {
int dis[N],i,j,visit[N];
memset(visit,0,sizeof(visit));
for(i=0;i<n;i++)
dis[i]=inf;
dis[u]=0;
//typedef pair<int ,int >p;
//priority_queue<p,vector<p>,greater<p> >q;
// q.push(make_pair(dis[u],u));
priority_queue<nodee>q;
nodee cur,now;
cur.len=0;
cur.v=u;
q.push(cur);
while(!q.empty()) {
nodee cur=q.top();
// j=cur.second;
q.pop();
if(visit[cur.v])continue;
visit[cur.v]=1;
for(i=head[cur.v];i!=-1;i=bian[i].next)
if(dis[bian[i].v]>dis[cur.v]+bian[i].w) {
dis[bian[i].v]=dis[cur.v]+bian[i].w;
now.len=dis[bian[i].v];
now.v=bian[i].v;
q.push(now);
}
}
if(dis[end]<inf)
return dis[end];
return -1;
}
int main() {
int i,j,a,b;
while(scanf("%d%d",&n,&m)!=EOF) {
yong=0;
memset(head,-1,sizeof(head));
while(m--) {
scanf("%d%d%d",&a,&b,&j);
Dcreat(a,b,j);
}
scanf("%d%d",&a,&b);
printf("%d\n",dijkstra(a,b));
}
return 0;
}
hdu 1874 dijkstra 队列实现 比数组高效特别在稀疏图的更多相关文章
- hdu 1874 Dijkstra算法
先贴个网上找的比较通俗易懂的教程: 2.1Dijkstra算法(非负权,使用于有向图和无向图) Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心 ...
- ACM: HDU 1874 畅通工程续-Dijkstra算法
HDU 1874 畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
- HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题
参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上: 迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...
- HDU 1874 畅通工程续(初涉dijkstra算法实现)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...
- hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题
hdu 2544 求点1到点n的最短路 无向图 Sample Input2 1 //结点数 边数1 2 3 //u v w3 31 2 52 3 53 1 20 0 Sample Output32 ...
- HDU 2544 最短路(floyd+bellman-ford+spfa+dijkstra队列优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目大意:找点1到点n的最短路(无向图) 练一下最短路... dijkstra+队列优化: #i ...
- hdu 1874 畅通工程续(迪杰斯特拉优先队列,floyd,spfa)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdoj 1874 dijkstra
在做PAT的甲1003,思考DFS和图什么的,时间紧张直接去看柳神(日后上传柳神的C++版本)的订阅,得知是dijkstra,转去用hdoj 1874练手,写了两天,终于调出来了 题目链接:http: ...
随机推荐
- 统一微信公众号、小程序、APP的用户信息
上次接手一个项目需要整合公众号.小程序以及APP的用户,查阅了微信文档以及一些作者的文章,中间踩了不少坑,在此记录一下解决的流程. 要点 实现统一信息的有以下几点: 1. 在微信开放平台绑定需要 ...
- VUE中全局变量的定义和使用
目录 VUE中全局变量的定义和使用 1.工作中遇到的两类问题 1.1 状态值(标志) 1.2 传递字段 2.解决方法 2.1 VUEX 2.2 使用全局变量法管理状态与字段值 3.具体实现 3.1创建 ...
- mycat登录报错Host 'XXX' is blocked because of many connection errors的另一种解决思路
报错时机 使用了mycat,而不是单纯使用了mysql. 报错信息 ERROR 1129 (HY000): Host '1.23.22.18' is blocked because of many c ...
- Linux文件详解
一.Linux文件类型分:普通文件.目录文件.链接文件.设备文件.管道文件. 1.普通文件:由ls -al显示属性时,第一个属性为 [-],例如 [-rwxrwxrwx].包括: 纯文本文件(ASCI ...
- 横向移动-广告图(web)
项目 (移动的广告牌) 要求: 1,实现图片一次以移动的方式出现,到最后一张完全出现时,回弹到第一张 2,鼠标放在图片上面图片移动,鼠标离开,图片停止移动 HTML结构 <!DOCTYPE ht ...
- Burp Suite抓https数据包
本地环境JDK1.8Burp Suite 1.7.26 Firefox 59.0.2 一.burp介绍请自行谷歌,这里不过多介绍 二.配置HTTPS抓包方法[以Firefox为例]通常情况下burp默 ...
- Ionic2/angularJs2中的静态类 PhotoLibrary 调用不上
photoLibrary调用报错:No provider for PhotoLibrary: 在调用相册文件时有用到photolibrary,总有些莫名的报错,3月份的时候这个坑让我不知所措,现在写下 ...
- 面试中的一些小问题之ES5和ES6的区别?
1995年,JavaScript作为网景浏览器的一部分首次发布,起初并不叫JavaScript,而是叫LiveScript,但是因为当时Java正火,也算是为了搭上java的顺风车,于是改成了Java ...
- oracle添加联合主键
1 alter table tablename add constraint unionkeyname primary key (column1,column2); 上面语句中: tablename为 ...
- js获取图片信息(一)-----获取图片的原始尺寸
如何获取图片的原始尺寸大小? 如下,当给 img 设置一个固定的大小时,要怎样获取图片的原始尺寸呢? #oImg{ width: 100px; height: 100px; } <img src ...