hdu 1599
2015-08-19 16:07
453 查看
杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K>2,就是说至除了出发点以外至少要经过2个其他不同的景区,而且不能重复经过同一个景区。现在8600需要你帮他找一条这样的路线,并且花费越少越好。
Input
第一行是2个整数N和M(N <= 100, M <= 1000),代表景区的个数和道路的条数。
接下来的M行里,每行包括3个整数a,b,c.代表a和b之间有一条通路,并且需要花费c元(c <= 100)。
Output
对于每个测试实例,如果能找到这样一条路线的话,输出花费的最小值。如果找不到的话,输出"It's impossible.".
Sample Input
Sample Output
弗洛伊德最小环
Input
第一行是2个整数N和M(N <= 100, M <= 1000),代表景区的个数和道路的条数。
接下来的M行里,每行包括3个整数a,b,c.代表a和b之间有一条通路,并且需要花费c元(c <= 100)。
Output
对于每个测试实例,如果能找到这样一条路线的话,输出花费的最小值。如果找不到的话,输出"It's impossible.".
Sample Input
3 3 1 2 1 2 3 1 1 3 1 3 3 1 2 1 1 2 3 2 3 1
Sample Output
3 It's impossible.
弗洛伊德最小环
#include <iostream> using namespace std; #define inf 999999 int map[110][110],dis[110][110]; int n,m; void floyd() { int num=inf; for(int k=1;k<=n;k++) { for(int i=1;i<k;i++) { for(int j=i+1;j<k;j++) { num=min(dis[i][j]+map[j][k]+map[k][i],num); } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(dis[i][j]>(dis[i][k]+dis[k][j])) dis[i][j]=dis[i][k]+dis[k][j]; } } } if(num<inf) cout<<num<<endl; else cout<<"It's impossible."<<endl; } int main() { int a,b,c; while(cin>>n>>m) { for(int i=0;i<=n;i++) { for(int j=0;j<=n;j++) { map[i][j]=inf; dis[i][j]=inf; } } for(int i=0;i<=m-1;i++) { cin>>a>>b>>c; if(map[a][b]>c) { map[a][b]=map[b][a]=c; dis[a][b]=dis[b][a]=c; } } floyd(); } return 0; }
相关文章推荐
- SharePoint 2013 IT Professional—— 分布式安装部署
- IOS AutoLayout 好的建议搜集
- 【LeetCode】34_Search for a Range
- HDOJ 3068.最长回文(Manacher算法模板)
- sqlalchemy
- slf4j使用
- 桌面支持--ZWMECH软件卸载工具
- Mongoose入门
- java并发容器(Map、List、BlockingQueue)详解
- SDK 更新配置
- java 回调的使用
- 我在武汉新东方上过的8个老师
- 桌面支持--zwcad打印显示文件位置戳记
- c++编译器对多态的实现原理总结
- wsimport命令构建WebService客户端
- mongodb查询数字开头的集合报错
- LLDB, iOS调试器
- 梯度下降与随机梯度下降
- Win10预览版10525彩色标题栏不适用Edge浏览器以及Groove音乐
- 杭电 HDU 1402 A * B Problem Plus JavaJ大数