hdu 1874 畅通工程续(最短路径)
来源:互联网 发布:淘宝直播开播入口 编辑:程序博客网 时间:2024/06/05 19:33
Problem Description
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
Input
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。
Output
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.
Sample Input
3 30 1 10 2 31 2 10 23 10 1 11 2
Sample Output
2-1
(1)Dijlstra算法:
#include <cstdio>#include <iostream>using namespace std;const int Max=10000000;int n,m;int map[201][201];int Dijsktra(int start,int end){ int lowcost[201]; bool visit[201]; for (int i=0; i<n; i++) { visit[i]=false; lowcost[i]=map[start][i]; } lowcost[start]=0; visit[start]=true; for (int i=0; i<n-1; i++) { int min=Max; int k=-1; for (int j=0; j<n; j++) { if(!visit[j]&&min>lowcost[j]) { min=lowcost[j]; k=j; } } if(k==-1) { continue; } visit[k]=true; for (int j=0; j<n; j++) { if(!visit[j] && lowcost[j]>map[k][j]+min) { lowcost[j]=map[k][j]+min; } } } return lowcost[end]; }int main(){ while (cin>>n>>m) { int a,b; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { if(i==j) { map[i][j]=0; } else { map[i][j]=Max; } } } for (int i=0; i<m; i++) { int c; cin>>a>>b>>c; if(map[a][b]>c)//重边 { map[b][a]=map[a][b]=c; } } cin>>a>>b; int ans=Dijsktra(a,b); if(ans<Max) { cout<<ans<<endl; } else { cout<<"-1"<<endl; } } return 0;}
#include <cstdio>#include <iostream>using namespace std;const int Max=10000000;int main(){ int n,m; int map[201][201]; while (cin>>n>>m) { int a,b; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { if(i==j) { map[i][j]=0; } else { map[i][j]=Max; } } } for (int i=0; i<m; i++) { int c; cin>>a>>b>>c; if(map[a][b]>c) { map[b][a]=map[a][b]=c; } } for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { for (int k=0; k<n; k++) { if(map[j][k]>map[j][i]+map[i][k]) { map[j][k]=map[j][i]+map[i][k]; } } } } cin>>a>>b; if(map[a][b]<Max) { cout<<map[a][b]<<endl; } else { cout<<"-1"<<endl; } } return 0;}
0 0
- hdu 1874 畅通工程续(最短路径)
- hdu 1874 畅通工程续 dij_最短路径
- HDU 1874 畅通工程续 最短路径
- HDU 1874 畅通工程续 (最短路径)
- HDU 1874 畅通工程续【最短路径】
- 【最短路径dijkstra算法】HDU 1874---畅通工程续
- 【最短路径spfa算法】HDU 1874---畅通工程续
- hdu 1874畅通工程再续(最短路径)
- hdu-1874 畅通工程续 最短路径问题
- [最短路径] HDU 1874 - 畅通工程续
- (最短路径 Dijkstra)HDU 1874 畅通工程续
- 畅通工程续(最短路径)
- HDU-1874 畅通工程续 (最短路径启蒙题)
- hdu 1874 畅通工程续(最短路径)
- HDU 1874 畅通工程续 最短路径入门(dijkstra)
- 畅通工程续(1874)hdu最短路径算法—Floyd
- hdu 1874 畅通工程续(两点最短路径,spfa&&floyd)
- hdu 1874畅通工程续+2544最短路+3790最短路径(dijkstra算法入门题)
- LabVIEW上位机与串口通信
- 我们的客户
- Qt之模型/视图(委托)
- zookeeper节点数与watch的性能测试
- CentOS配置smaba与Windows共享文件
- hdu 1874 畅通工程续(最短路径)
- 待解决的英雄会上的一些题
- 三极管的电平转换及驱动电路分析
- C#连接Oracle数据库
- C++ primer 第五版 中文版 11.3.1 节练习 个人code
- 对功率谱的一点理解
- JVM的原理机制
- 博客搬家
- WebService原理与实例