参考  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;

}

最新文章

  1. OncrickListener的实现
  2. oracle 递归应用(挺复杂的)
  3. Linux下6种优秀的邮件传输代理
  4. django中的静态文件管理
  5. Linux: xclip,pbcopy,xsel用法 terminal 复制粘帖 (mac , ubuntu)
  6. Build Settings
  7. Oracle的spool命令
  8. ubuntu 运行android sdk 下的工具adb报bash: ./adb: No such file or directory
  9. POJ 1723 SOLDIERS (中位数)
  10. TCP header
  11. 辛星解读为什么PHP须要模板
  12. C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容
  13. javascript 实现加法分离。 plus(3)(4); // =&gt; 得到 7
  14. Boost LRU-Cache使用方法简介
  15. Gauge----自动化测试工具
  16. 海量数据,大数据处理技术--【Hbase】
  17. FixedThreadPool吞掉了异常
  18. Core2.0知识整理
  19. JavaEE正常开发怎么做
  20. C++ 文件保存

热门文章

  1. Java并发编程系列之CyclicBarrier详解
  2. 洛谷 P2090 数字对
  3. 一个完整的mybatis项目,包含增删改查
  4. [ Luogu 3924 ] 康纳的线段树
  5. 后台管理进程GameMaster
  6. python做一个数独小游戏
  7. git add . 的时候报错fatal: Unable to create : …File exists.
  8. Props、State、Refs 与表单处理
  9. (转)全文检索技术学习(二)——配置Lucene的开发环境
  10. CAD控件:COM接口实现自定义实体