邻接表实现最短路算法
2016-04-18 13:20
435 查看
<span style="font-family:Courier New;">#include <cstdio> #include <cstring> #include <string> #include <iostream> using namespace std; const int MAXN=1000+5; const int MAXM=100000+5; const int INF=0x7fffffff; struct Edge { int u,v,w,next; }; Edge e[MAXM]; int dis[MAXN],vis[MAXN],pre[MAXN]; int main() { int N,M,C,D,K; while(scanf("%d%d%d%d%d",&N,&M,&C,&D,&K)!=EOF) { memset(pre,-1,sizeof(pre)); for(int i=1;i<=M;i++) { scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); e[i].next=pre[e[i].u]; pre[e[i].u]=i; } for(int i=1;i<=N;i++) { dis[i]=INF; } memset(vis,0,sizeof(vis)); dis[C]=0; for(int t=1;t<=N;t++) { int x,m=INF; for(int j=1;j<=N;j++) { if(dis[j]<=m && !vis[j]) { x=j; m=dis[j]; } } vis[x]=1; for(int j=pre[x];j!=-1;j=e[j].next) { if(dis[e[j].v]>dis[e[j].u]+e[j].w) dis[e[j].v]=dis[e[j].u]+e[j].w; } } if(dis[D]<=K) printf("%d\n",dis[D]); else printf("Sorry\n"); cout<<INF<<endl; } return 0; }</span>
相关文章推荐
- java基本数据类型
- @responseBody和ajax异步的关系---今天才明白
- 第四章--android核心组件之Activity与ListActivity中使用ListView的区别
- 过河问题
- 一次性去掉Word 2013文档中所有文字下波浪线的方法
- LeetCode 第 9 题(Palindrome Number)
- LeetCode 第 9 题(Palindrome Number)
- 第八周项目(1)-数组做数据成员(工资)
- boa服务器make错误
- MySQL并发复制系列三:MySQL和MariaDB实现对比
- mysql自动停止 Plugin FEDERATED is disabled 的完美解决方法
- HDU 2444 二分图
- java里类方法和实例方法区别
- 深入理解java异常处理机制
- _视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途
- java集合-TreeMap
- 关于HashTable,HashMap和TreeMap的几点心得
- BigInteger转INT
- HDOJ1963完全背包
- C# 结构体 struct