必威体育Betway必威体育官网
当前位置:首页 > IT技术

Floyd algorithm!!!!!(万恶的弗洛伊德算法)

时间:2019-07-04 20:43:26来源:IT技术作者:seo实验室小编阅读:59次「手机版」
 

弗洛伊德算法

曾经有位滑稽的博主说过:搜索就是优雅的暴力。今天他又要说,DP就是优雅地搜索。

不是每一个弗洛伊德都写算法,也不是写算法的都叫弗洛伊德,还有一位人家写性学三论去了。

这位弗洛伊德来历不一般,斯坦福大学的教授,1978年的图灵奖就发给人家了,这么一个很牛的弗洛伊德。

基本思想就是DP,开个二维数组来找最短路辣~

缺点就是因为要开二维数组所以就是容易报内存错误,比如数组开的太大辣,或者运行出错啊之类的。

优点就是,思路简单。

言归正传,弗洛伊德算法的基本思路,如果说我们从A到B点时,经历一个C点可以使路径或者时间更短的话就从这里中转,然后尝试再加一个中转点,再加一个,再加一个,不停地加下去,直到所有可能都已经列举。

优雅的搜索。

所以这个东西我感觉没有什么讲头给泥萌直接上代码辣OVO:

#include<stdio.h>
#include<string.h>
#define inf 0x3f3f3f3f//假定无穷大
#define maxn 1000//问题规模

int dis[maxn][maxn];//问题数组,dis[i][j]代表点i到j的距离

int main()
{
	int n;
	scanf("%d", &n);
	memset(dis, inf, sizeof(dis));//在不知道点的距离的时候就默认所有点之间都是无穷大
	int a, b,c;
	while (n--)//首先输入几个已知点之间的距离
	{
		scanf("%d %d %d", a, b, c);
		dis[a][b] = dis[b][a] = c;//这里默认用无向图
	}
	for (int k = 0	; k < maxn; k++)//Floyd算法
	{
		for (int i = 0; i < maxn; i++)
		{
			for (int j = 0; j < maxn; j++)
			{
				dis[i][j] = dis[i][j] <= dis[i][k] + dis[k][j] ? dis[i][j] : dis[i][k] + dis[k][j];//DP!!!!!!!!!!!
			}
		}
	}
	int t;
	scanf("%d", &t);//T次询问辣~
	while (t--)
	{
		scanf("%d %d", &a, &b);
		printf("%d\n", dis[a][b]);
	}
	return 0;
}

喜欢别忘记点赞!QAQ

相关阅读

傻子也能看懂的弗洛伊德算法(转)

文章出处:https://www.cnblogs.com/ECJTUACM-873284962/p/6995648.html 暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城

floyd算法:我们真的明白floyd吗?

转自:https://blog.csdn.net/ljhandlwt/article/details/52096932图论里一个很重要的问题是最短路径问题.这个问题,在离散数学课上

分享到:

栏目导航

推荐阅读

热门阅读