hdu1599(floyd算法讲解)
来源:互联网 发布:网络销售app软件 编辑:程序博客网 时间:2024/04/30 13:16
Description
Input
接下来的M行里,每行包括3个整数a,b,c.代表a和b之间有一条通路,并且需要花费c元(c <= 100)。
Output
Sample Input
3 31 2 12 3 11 3 13 31 2 11 2 32 3 1
Sample Output
3It's impossible.
简单的说floyd算法就是下面这段代码的延伸:
for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[i][j]=min(d[i][k]+d[k][j],d[i][j]);
(1)算法思想原理:
Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)
从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。
(2).算法描述:
a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
b.对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。
而对于这题,至少经过俩景区,想想看?这个俩景区有什么用?!!!
如果只是经过一个景区,那么与两景区唯一不同的一种可能情况就是经过一个景区可能就是往返,因此!!!连不成环~~~~
那么!接下来这题不久将问题转化成了与经过俩景区完全无关的成环的最小权值问题吗?这个思想搞清楚了再去看代码会清晰很多!!
#include <iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[110][110],d[110][110];const int maxn=100000000;void init(int n){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=maxn,d[i][j]=maxn;}int main(){ int m,n; while(~scanf("%d%d",&n,&m)) { init(n); for(int i=0;i<m;i++) { int a1,a2,ww; scanf("%d%d%d",&a1,&a2,&ww); if(a[a1][a2]>ww) a[a1][a2]=a[a2][a1]=d[a1][a2]=d[a2][a1]=ww; } int min0=maxn; for(int k=1;k<=n;k++) { for(int i=1;i<k;i++) for(int j=i+1;j<k;j++) min0=min(min0,d[i][j]+a[i][k]+a[k][j]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[i][j]=min(d[i][k]+d[k][j],d[i][j]); } if(min0>=maxn) printf("It's impossible.\n"); else printf("%d\n",min0); } return 0;}
- hdu1599(floyd算法讲解)
- 最小环 hdu1599 Floyd算法
- 最短路径hdu1599(floyd)
- hdu1599+floyd最小环
- HDU1599 find the mincost route (floyd求最小环)
- floyd算法讲解
- Floyd算法讲解
- hdu1599 floyd 求最小环
- 弗洛伊德(Floyd)算法简单讲解,5行代码
- hdu1599 find the mincost route(floyd求无向图最小环)
- hdu1599 Floyd求最大环 最小环
- HDU1599:find the mincost route(Floyd)
- HDU1599最小环权值,floyd
- HDU1599 find the mincost route (Floyd)
- floyd求图的最小环路 HDU1599
- HDU1599
- hdu1599
- hdu1599
- Effective C++学习笔记四(设计与声明)
- POJ3252_Round Numbers
- InnoSetup快速入门(四):创建桌面快捷方式并作为可选的附加任务
- Ubantu下搭建Hadoop1.x完全分布式集群
- STL使用:deque双端队列
- hdu1599(floyd算法讲解)
- Android引入动态库so的方法
- UML类图几种关系的总结
- HDU 1532 Drainage Ditches(基础最大流)
- 别被骗了别心软
- 微信OAuth总结
- 23种设计模式
- PAT训练(1)
- Hexo插件机制分析