算法复习——floyd求最小环(poj1734)
题目:
题目描述
N 个景区,任意两个景区之间有一条或多条双向的路来连接,现在 Mr.Zeng 想找一条旅游路线,这个路线从A点出发并且最后回到 A 点,假设经过的路线为 V1,V2,....VK,V1,那么必须满足 K>2,就是说至除了出发点以外至少要经过 2 个其他不同的景区,而且不能重复经过同一个景区。不存在这样的景区X:从 X 出发不到达其他景区马上回到 X。现在 Mr.Zeng 需要你帮他找一条这样的路线,并且长度越小越好。
输入格式
第一行包含两个正整数:景区个数 N (N<=100),另一个是道路的数目 M (M<10000)。
接下来 M 行每行描述一条路,每一行有三个正整数 A,B,C,其中 A 和 B 分别表示这条路连接的两个景区的编号,C 表示这条路的长度(不超过 500 的正整数)。
输出格式
如果这条观光路线是不存在的话就显示“No solution.”(有句号);
如果这条观光路线存在就输出经过的最小长度。
样例数据 1
备注
【样例说明】
经过路线 1 3 5 2 1,长度:10+20+15+16=61
题解:
floyd求最小环模板题···
简单来说···为了保证floyd求最小环时为了保证不会出现重边的错误,在求最短路时,枚举k,先找经过了k的一段最短路,再与对应的已经求出的最短路相加···就可以保证不会重边了···
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int inf=1e+;
const int N=;
const int M=;
int n,m,dis[N][N],dp[N][N];
int R()
{
char c;
int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c>=''&&c<='';c=getchar())
f=(f<<)+(f<<)+c-'';
return f;
}
int floyd()
{
int minn=inf;
for(int k=;k<=n;k++)
{
for(int i=;i<k;i++)
for(int j=i+;j<k;j++)
minn=min(dp[i][j]+dis[i][k]+dis[k][j],minn);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dp[i][j]=min(dp[i][k]+dp[k][j],dp[i][j]); }
return minn;
}
int main()
{
//freopen("a.in","r",stdin);
n=R();
m=R();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=dp[i][j]=inf; int a,b,c;
for(int i=;i<=m;i++)
{
a=R();
b=R();
c=R();
dis[a][b]=dis[b][a]=dp[a][b]=dp[b][a]=min(dis[a][b],c);
}
int ans;
ans=floyd();
if(ans==inf)
cout<<"No solution."<<endl;
else
cout<<ans<<endl;
return ;
}
算法复习——floyd求最小环(poj1734)的更多相关文章
- POJ1734 Sightseeing trip (Floyd求最小环)
学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...
- Floyd求最小环!(转载,非原创) 附加习题(原创。)HDU-1599
//Floyd 的 改进写法可以解决最小环问题,时间复杂度依然是 O(n^3),储存结构也是邻接矩阵 int mincircle = infinity; Dist = Graph; ;k<nVe ...
- floyd求最小环 模板
http://www.cnblogs.com/Yz81128/archive/2012/08/15/2640940.html 求最小环 floyd求最小环 2011-08-14 9:42 1 定义: ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- 2018.09.15 hdu1599find the mincost route(floyd求最小环)
传送门 floyd求最小环的板子题目. 就是枚举两个相邻的点求最小环就行了. 代码: #include<bits/stdc++.h> #define inf 0x3f3f3f3f3f3f ...
- 【BZOJ 1027】 (凸包+floyd求最小环)
[题意] 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金 ...
- CF 1206D - Shortest Cycle Floyd求最小环
Shortest Cycle 题意 有n(n <= 100000)个数字,两个数字间取&运算结果大于0的话连一条边.问图中的最小环. 思路 可以发现当非0数的个数很大,比如大于200时, ...
- 弗洛伊德Floyd求最小环
模板: #include<bits/stdc++.h> using namespace std; ; const int INF = 0xffffff0; ]; void Solve(in ...
- FLOYD 求最小环
首先 先介绍一下 FLOYD算法的基本思想 设d[i,j,k]是在只允许经过结点1…k的情况下i到j的最短路长度则它有两种情况(想一想,为什么):最短路经过点k,d[i,j,k]=d[i,k,k- ...
随机推荐
- moment.js获取当前日期是当年的第几周
/** * 实现当前日期是当年的第几周,再向前和向后推几周 * js数组保存当前日期的前后两周(共五周的数据) * */ var initSearchMajorChanges = function() ...
- jmeter中通过命令方式生成结果文件
通过命令的方式将jmeter生成的jtl结果文件生成html文件,以便更直观的分析结果数据,以下命令可以放在1个bat文件中取执行. bat文件可以放到jmeter的根目录下. 步骤1: 通过命令方式 ...
- C# 一维数组 二位数组 多维数组
什么是数组? 数组是一组变量,就是把一些变量串在一起,放在一块. 数组的作用? 假设有一堆变量,每个变量都有一些程序,那么这堆程序放在一起 程序就会混乱,处理起来有些麻烦,那么数组就是把这些变量放在 ...
- Servlet和JSP之有关Servlet和JSP的梳理(二)
JSP JSP页面本质上是一个Servlet,JSP页面在JSP容器中运行,一个Servlet容器通常也是JSP容器. 当一个JSP页面第一次被请求时,Servlet/JSP容器主要做一下两件事情: ...
- 解决android studio设置版本号
获取版本号代码 /** * 获取版本号 * @return 当前应用的版本号 */ public static String getVersion(Context context) { try { P ...
- 1.JOIN和UNION区别
1.JOIN和UNION区别join 是两张表做交连后里面条件相同的部分记录产生一个记录集,union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 . JOIN用于按照ON条件联接两 ...
- IOS修改系统音量
#import <IOKit/IOKitLib.h> #import <IOKit/hidsystem/IOHIDLib.h> #import <IOKit/hidsys ...
- js解析json格式
function save(){ var value2 = { "china":[ {"name":"hangzhou", "it ...
- plsql循环的简单实例
declare v_id tbl_regions.regions_id%type; begin .. loop select t.regions_id into v_id from tbl_regio ...
- cocos2d popSceneWithTransition()方法
要在CCDirector.h中增加如下方法: template <typename T> void popSceneWithTransition(float t) { CCASSERT(_ ...