求最小环(基于Floyd)
来源:互联网 发布:ppt软件哪个好 编辑:程序博客网 时间:2024/06/02 00:23
/*算法的思想主要可以理解为:一个环至少需要三条边,那么把每组两两相邻的边<i,k>和<k,j>选作其中两条边,用floyd找到从i到j的最短路径,把这条路径作为<i,k>、<k,j>之外的边构成环。选择最短的一条环即可。*/#include <iostream>using namespace std;#define IN 100000000int main(){int i,j,k,x1,x2,n,m;long ans,l;long g[100][100];long dist[100][100];while(cin>>n>>m){ for(i=0;i<n;i++) for(j=0;j<n;j++) g[i][j]=IN; for(i=0;i<m;i++) { cin>>x1>>x2>>l; g[x1-1][x2-1]=l; g[x2-1][x1-1]=l; } for(i=0;i<n;i++) g[i][i]=0; for(i=0;i<n;i++) for(j=0;j<n;j++) dist[i][j]=g[i][j]; ans=IN; for(k=0;k<n;k++) { for(i=0;i<k;i++) for(j=0;j<i;j++) if(dist[i][j]+g[i][k]+g[k][j]<ans) ans=dist[i][j]+g[i][k]+g[k][j];//保存最小环 for(i=0;i<n;i++) //floyd算法的dp for(j=0;j<n;j++) if(dist[i][k]+dist[k][j]<dist[i][j]) dist[i][j]=dist[i][k]+dist[k][j]; } if(ans!=IN) cout<<ans<<endl; else cout<<"No solution."<<endl;}return 0;}
1 0
- 求最小环(基于Floyd)
- floyd求最小环
- floyd求最小环
- floyd求最小环
- floyd求最小环
- FLOYD 求最小环
- floyd求最小环
- floyd求最小环
- Floyd求最小环
- floyd求最小环
- floyd求最小环
- ural 1004(floyd 求最小环)
- poj1734Sightseeing trip(floyd求最小环)
- floyd算法求最小环
- Floyd算法求最小环
- floyd求最小环 模板
- hdu1599 floyd 求最小环
- 求最小环(floyd,dijkstra)
- JAVA对象比较器Comparator
- LeetCode *** 257. Binary Tree Paths
- Android 无线调试
- CocoaPods使用详细说明
- spoj CPTTRN3 - Character Patterns (Act 3)
- 求最小环(基于Floyd)
- android.os.build.clsass and class VERSION
- caffe用python时可能需要的模块安装
- eclipse的快捷键操作-@Override和import
- Thrift
- recycleview学习03
- 编码学习
- Fedora 22 安装无线网卡BCM43142
- 文库账号:xqoqk34523@163.com 文库密码:qmHr8N