参考  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 队列实现 比数组高效特别在稀疏图的更多相关文章

  1. hdu 1874 Dijkstra算法

    先贴个网上找的比较通俗易懂的教程: 2.1Dijkstra算法(非负权,使用于有向图和无向图) Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心 ...

  2. ACM: HDU 1874 畅通工程续-Dijkstra算法

    HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  3. HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题

    参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上:  迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...

  4. (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。

    floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...

  5. HDU 1874 畅通工程续(初涉dijkstra算法实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...

  6. 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 ...

  7. HDU 2544 最短路(floyd+bellman-ford+spfa+dijkstra队列优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目大意:找点1到点n的最短路(无向图) 练一下最短路... dijkstra+队列优化: #i ...

  8. hdu 1874 畅通工程续(迪杰斯特拉优先队列,floyd,spfa)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. hdoj 1874 dijkstra

    在做PAT的甲1003,思考DFS和图什么的,时间紧张直接去看柳神(日后上传柳神的C++版本)的订阅,得知是dijkstra,转去用hdoj 1874练手,写了两天,终于调出来了 题目链接:http: ...

随机推荐

  1. 统一微信公众号、小程序、APP的用户信息

     上次接手一个项目需要整合公众号.小程序以及APP的用户,查阅了微信文档以及一些作者的文章,中间踩了不少坑,在此记录一下解决的流程. 要点  实现统一信息的有以下几点:  1. 在微信开放平台绑定需要 ...

  2. VUE中全局变量的定义和使用

    目录 VUE中全局变量的定义和使用 1.工作中遇到的两类问题 1.1 状态值(标志) 1.2 传递字段 2.解决方法 2.1 VUEX 2.2 使用全局变量法管理状态与字段值 3.具体实现 3.1创建 ...

  3. 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 ...

  4. Linux文件详解

    一.Linux文件类型分:普通文件.目录文件.链接文件.设备文件.管道文件. 1.普通文件:由ls -al显示属性时,第一个属性为 [-],例如 [-rwxrwxrwx].包括: 纯文本文件(ASCI ...

  5. 横向移动-广告图(web)

    项目 (移动的广告牌) 要求: 1,实现图片一次以移动的方式出现,到最后一张完全出现时,回弹到第一张 2,鼠标放在图片上面图片移动,鼠标离开,图片停止移动 HTML结构 <!DOCTYPE ht ...

  6. Burp Suite抓https数据包

    本地环境JDK1.8Burp Suite 1.7.26 Firefox 59.0.2 一.burp介绍请自行谷歌,这里不过多介绍 二.配置HTTPS抓包方法[以Firefox为例]通常情况下burp默 ...

  7. Ionic2/angularJs2中的静态类 PhotoLibrary 调用不上

    photoLibrary调用报错:No provider for PhotoLibrary: 在调用相册文件时有用到photolibrary,总有些莫名的报错,3月份的时候这个坑让我不知所措,现在写下 ...

  8. 面试中的一些小问题之ES5和ES6的区别?

    1995年,JavaScript作为网景浏览器的一部分首次发布,起初并不叫JavaScript,而是叫LiveScript,但是因为当时Java正火,也算是为了搭上java的顺风车,于是改成了Java ...

  9. oracle添加联合主键

    1 alter table tablename add constraint unionkeyname primary key (column1,column2); 上面语句中: tablename为 ...

  10. js获取图片信息(一)-----获取图片的原始尺寸

    如何获取图片的原始尺寸大小? 如下,当给 img 设置一个固定的大小时,要怎样获取图片的原始尺寸呢? #oImg{ width: 100px; height: 100px; } <img src ...