最短路<dijk>
2024-10-15 14:28:47
题意:
有n个城市,有m条路,给出每条路的出发和结束的城市及长度,求从第一个城市到最后一个城市的最短路。按格式输出。
题解:
标准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;
}
最新文章
- 内存提取SWF,破解doswf方法概述
- java提高篇(八)----详解内部类
- Flexbox制作CSS布局实现水平垂直居中
- free 和 fclose
- java反射快速入门(二)
- php基础_2
- git pull VS git fetch&;merge(good)
- lua及luci学习
- vue(1)——node.js安装使用,利用npm安装vue
- shell脚本学习笔记(符号)
- 如何在Qt Creator中导入图标资源
- js 将很长的内容进行页面分页显示
- DOM事件监听器
- okvis代码解读
- element-dialog封装成子组件
- FFmpeg在JAVA中的使用-音频提取&;字幕压缩
- 【python学习-5】面向对象的python
- Django-Filter源码解析一
- webView内部跳转后 返回不行了
- Rookey.Frame v1.0快速开发平台-用户登录