最短路<dijk>
2016-06-13 18:42
309 查看
题意:
有n个城市,有m条路,给出每条路的出发和结束的城市及长度,求从第一个城市到最后一个城市的最短路。按格式输出。
power oj 2443
题解:
标准dijk算法。
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int INF=0x3f3f3f3f; const int maxn=505; typedef long long LL; int W[maxn][maxn]; int vis[maxn]; int dis[maxn]; int n,m; void init() { for(int i=0;i<maxn;i++) { for(int j=0;j<maxn;j++) W[i][j]=INF; W[i][i]=0; } memset(vis,0,sizeof(vis)); } void dijk() { for(int i=0;i<n;i++) dis[i]=(i==0?0:INF); for(int i = 0;i < n;i++) { int m = INF , x=0; for(int y = 0;y <n;y++) if(!vis[y] && dis[y] <= m) m = dis[x=y]; vis[x] = true; for(int y = 0;y < n;y++) dis[y]=min(dis[y],dis[x]+W[x][y]); } } int main() { double sp1,sp2; int u,v,d; while(~scanf("%d%d",&n,&m)) { init(); for(int i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&d); if(W[u][v]>d&&u!=v) W[u][v]=W[v][u]=d; } dijk(); scanf("%lf%lf",&sp1,&sp2); if(dis[n-1]>=INF) printf("There is a tie!\n"); else { printf("%.1lf %.1lf\n",(double)dis[n-1]/sp1+10.00,(double)dis[n-1]/sp2); } } return 0; }
相关文章推荐
- 用Java操作树莓派!pi4j简介与安装
- 一次调戏群友的事件
- TextUtils
- 概率问题的求解 —— 样本空间
- 调试eclipse javaEE所遇问题解决
- ERROR YarnScheduler: Lost executor
- 什么是软件工程?
- ios获取所有相册的视频并播放
- Editplus格式化代码
- oracle基本
- Windows 2008 R2防火墙,允许被ping的设置方法
- android Service的学习
- docker编译fuel
- 断言assert引入包
- isAssignableFrom和isInstance
- spring boot 入门
- Handler 小结
- 缺陷报告
- 存储
- VC++鼠标进入离开窗口