poj1734Sightseeing trip(floyd求最小环)
来源:互联网 发布:2016正规淘宝代刷平台 编辑:程序博客网 时间:2024/05/24 05:38
这道题目是floyd求最小环,意思是这样的,有那么多的环,找到一个权的和最小的,然后把序号输出来,这个的话我上网上学习了用floyd求最小环,就是u到k,到v,再到u,v到u这段不经过k,那么就让这个环里k是最大的就行了,有一点是为什么非要先求环再求最短路呢,因为你k是最大的,u,v都不如他打,如果你先求了最短路的话,那么dis[i][j]就会已经经过k了,而我们是要比他小,所以,就是这样
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;const int INF=10000000;//这里设成0x3f3f3f3f就错了,我也不知道为啥,可能是20000点,100000条边,会加炸const int maxn=105;int n,m,cnt,ans,minc;int dis[maxn][maxn],g[maxn][maxn],res[maxn][maxn];int path[maxn];void init(){ for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) { res[i][j]=i; if(i==j) dis[i][j]=dis[j][i]=g[i][j]=g[j][i]=0; else dis[i][j]=dis[j][i]=g[i][j]=g[j][i]=INF; }}void solve(){ int p,tmp; minc=INF; for(int k=1; k<=n; k++) { for(int i=1; i<k; i++) for(int j=i+1; j<k; j++) { if(minc>dis[i][j]+g[i][k]+g[k][j]) { minc=dis[i][j]+g[i][k]+g[k][j]; cnt=0; p=j; while(p!=i) { path[cnt++]=p; p=res[i][p]; } path[cnt++]=i; path[cnt++]=k; } } 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]; res[i][j]=res[k][j];//这里不是k,表示的是,距离j最近的那个点 } } }}int main(){ ios::sync_with_stdio(false); int u,v,w; while(cin>>n>>m) { for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) { g[i][j]=INF; dis[i][j]=INF; res[i][j]=i; } for(int i=1; i<=m; i++) { cin>>u>>v>>w; if(w<g[u][v]) { dis[u][v]=dis[v][u]=g[u][v]=g[v][u]=w; } } solve(); if(minc==INF) cout<<"No solution."<<endl; else { cout<<path[0]; for(int i=1; i<cnt; i++) cout<<" "<<path[i]; cout<<endl; } } return 0;}
0 0
- poj1734Sightseeing trip(floyd求最小环)
- poj1734Sightseeing trip floyd最小环
- poj1734Sightseeing trip【floyd+最小环+路径记录】
- poj1734 Sightseeing trip(Floyd求最小环)
- Sightseeing trip floyd求最小环
- POJ 1734 Sightseeing trip Floyd求最小环
- POJ 1734 Sightseeing trip Floyd求最小环
- POJ 1734 Sightseeing trip Floyd求最小环
- poj 1734 Sightseeing trip 扩展floyd求最小环
- POJ 1734 Sightseeing trip【floyd求最小环+记录路径】
- POJ 1734 Sightseeing trip Floyd求最小环
- poj 1734 Sightseeing trip(floyd求最小环并输出方案)
- poj 1734 Sightseeing trip (floyd求最小环并记录路径)
- floyd求最小环
- floyd求最小环
- floyd求最小环
- floyd求最小环
- FLOYD 求最小环
- mysql mysqli的使用
- JS实现Clone
- 初级程序的日常
- Qt中根据pc屏幕分辨率按比例修改窗口的大小
- hdu 3711 Binary Number
- poj1734Sightseeing trip(floyd求最小环)
- Anaconda配置opencv
- Swift -欢迎界面1页, 延长启动图片的显示时间(LaunchImage)
- 飛飛(七十八)(补)将数组a中的前size个元素按从小到大顺序排列
- AVCodec结构体
- web环境搭建,git使用方法,新手环境搭建。
- 如何使用远程桌面连接远程计算机?
- StringUtils工具类用法
- 五子棋