hdu1874——畅通工程续(最短路径)
2016-02-03 20:56
381 查看
Problem Description
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
Input
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(0
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
Input
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(0
#include<iostream> #include<cstring> #include<stdio.h> #define maxcost 1000000 #define max 210 using namespace std; int n,map[max][max],vis[max],dist[max],s; void dij(int v) { int min,i,j,k,dis; for(i=0; i<n; ++i) { dist[i]=map[v][i]; vis[i]=0; } vis[v]=1; dist[v]=0; for(i=0; i<n; ++i) { min=maxcost; for(j=0; j<n; ++j) if(dist[j]<min&&!vis[j]) //找出当前距点v最近的没被遍历过的点k { min=dist[j]; k=j; } if(min==maxcost) break; vis[k]=1; //然后这个点就被遍历过了 for(j=0; j<n; ++j) { dis=dist[k]+map[k][j]; if(!vis[j]&&dist[j]>dis) dist[j]=dis; } } } int main() { int t,i,j,a,b,c,m; while(~scanf("%d%d",&n,&m)) { for(i=0; i<n; ++i) for(j=0; j<n; ++j) map[i][j]=maxcost; while(m--) { scanf("%d%d%d",&a,&b,&c); if(c<map[a][b]) { map[a][b]=c; map[b][a]=c; } } scanf("%d%d",&s,&t); dij(s); if(dist[t]==maxcost) printf("-1\n"); else printf("%d\n",dist[t]); } return 0; }
相关文章推荐
- 学习笔记--(平衡树)splay
- [Spring实战系列](8)Spring注入方式之setter注入
- 学习笔记--(平衡树)splay
- 数据结构——线性表的顺序存储结构
- 例题10-4 UVA 10791 Minimum Sum LCM (最小公倍数的最小和)
- UVA679模拟小球降落(大数模拟超时是找规律)
- 系统性能调优攻略
- linux(centos)搭建SVN服务器
- gbk与utf-8在网页中的一点不同之处
- IIS8.0, IIS7.0提示“请求筛选模块被配置为拒绝包含双重转义序列的请求”处理办法
- 一个highcharts混合图Demo
- #Memcached系列#(2)在Windows环境下安装Memcached
- HandlerAPI介绍
- 最小公倍数 LCM 2
- java中构造器的多态
- Piotr's Ants
- C++关于类的强制类型转换
- thinking in java学习之nio-bytebuffer4
- Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) C. Constellation
- JDK目录结构