hdu acm 1874 畅通工程续
2015-11-04 23:52
393 查看
[align=left]Problem Description[/align]
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
[align=left]Input[/align]
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数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),分别代表起点和终点。
[align=left]Output[/align]
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.
[align=left]Sample Input[/align]
3 3
0 1 1
0 2 3
1 2 1
0 2
3 1
0 1 1
1 2
[align=left]Sample Output[/align]
2
-1
最短路径。。。。dijkstra
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
[align=left]Input[/align]
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数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),分别代表起点和终点。
[align=left]Output[/align]
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.
[align=left]Sample Input[/align]
3 3
0 1 1
0 2 3
1 2 1
0 2
3 1
0 1 1
1 2
[align=left]Sample Output[/align]
2
-1
最短路径。。。。dijkstra
#include<iostream> using namespace std; #include<string.h> #define maxn 999999999 int dist[300],n,m,s,t; int mat[300][300]; void dijkstra(int v0) { int vis[300],i,j; for(i=0;i<n;i++) { dist[i]=mat[v0][i]; vis[i]=0; } dist[v0]=0; vis[v0]=1; for(i=1;i<n;i++) { int mindist=maxn; int minpos=v0; for(j=0;j<n;j++) if(!vis[j]&&dist[j]<mindist) { minpos=j; mindist=dist[j]; } vis[minpos]=1; for(j=0;j<n;j++) { if(!vis[j]&&mat[minpos][j]!=maxn) { if(dist[minpos]+mat[minpos][j]<dist[j]) { dist[j]=dist[minpos]+mat[minpos][j]; } } } } if(dist[t]!=maxn) cout<<dist[t]<<endl; else cout<<"-1\n"; return ; } int main() { int x,y,d,i,j; while(cin>>n>>m) { for(i=0;i<n;i++) for(j=0;j<n;j++) mat[i][j]=maxn; for(i=0;i<m;i++) { cin>>x>>y>>d; if(mat[x][y]>d)//防止两点有多次输入,要取最小值 { mat[x][y]=d; mat[y][x]=d; } } cin>>s>>t; dijkstra(s); } return 0; }
相关文章推荐
- sqlserver 使用sql语句创建数据库、创建表
- 字符串---将一句话里的单词进行倒置,标点符号不倒换
- 5大布局方式详解
- mac git tab tab 无效
- android----AndroidStudio错误:Failed to create the Java Virtual Machine
- eMMC技术教程(一): eMMC是什么?可以做到多大容量(转自youdianhai.com)
- 二叉树的下一个结点(链表+二叉树+剑指offer)
- XCode7免证书真机调试
- Scrum Meeting---Nine(2015-11-4)
- 平面分割问题。。
- python入门犯错
- 犀牛笔记--函数
- 笔记片段
- Scrum Meeting---Eight(2015-11-3)
- IDEA快捷键
- MySQL KeepAlived安装
- Leetcode #25 Reverse Nodes in k-Group
- HDU 5536 Chip Factory (2015长春J题&&Trie树)
- 黑马程序员——JAVA基础----多态、抽象类和接口
- RHEL6配置ip