首页 > 其他分享 >多源最短路问题

多源最短路问题

时间:2023-08-16 22:23:04浏览次数:45  
标签:min int 短路 问题 Floyd 105 多源 dis

  • Floyd算法

例题

【模板】Floyd 算法

原理

Floyd 算法的思想是动态规划。维护一个数组 dis[k][u][v] ,表示从点 \(u\) 到点 \(v\) 的最短路径,且中间经过的点(不包括 \(u\), \(v\) )的序号最大为 \(k\)。

状态转移方程:

\(f(k,u,v) = min{(f(k-1,u,v),f(k-1,u,k)+f(k-1,k,v))}\)

为了节省空间开销,我们可以压掉第一维,简化后的状态转移方程即为:

dis[1][u][v] = min(dis[0][u][v], dis[0][u][k] + dis[0][k][v])

代码

//多源最短路问题
//Floyd算法
#include <iostream>
using namespace std;
int n, m;//表示点的个数和边的个数
int e[105][105];
int dis[2][105][105];//dis[i][u][v]表示u->v的最短路径
void init()
{
	cin >> n >> m;
	for (int i = 0; i <= n; i++)
	{
		for (int j = 0; j <= n; j++)e[i][j] = 10000000;
	}
	for (int i = 1; i <= n; i++)e[i][i] = 0;
	for (int x = 0; x <= 1; x++)
	{
		for (int i = 0; i <= n; i++)
		{
			for (int j = 0; j <= n; j++)dis[x][i][j] = 10000000;
		}
	}
	for (int i = 1; i <= m; i++)
	{
		int u, v, w;
		cin >> u >> v >> w;
		e[u][v] = e[v][u] = w;//邻接矩阵存图
	}
}
void Floyd()
{
	//状态转移方程dis[k][u][v] = min(dis[k - 1][u][v], dis[k - 1][u][k] + dis[k - 1][k][v]);
	//但是第一维可以压掉,变成dis[1][u][v] = min(dis[0][u][v], dis[0][u][k] + dis[0][k][v]),让空间复杂度从n*n*n降低到n*n
	for (int u = 1; u <= n; u++)
	{
		for (int v = 1; v <= n; v++)
		{
			dis[0][u][v] = e[u][v];//初始状态
		}
	}
	
	for (int k = 1; k <= n; k++)
	{
		for (int u = 1; u <= n; u++)
		{
			for (int v = 1; v <= n; v++)
			{
				dis[k & 1][u][v] = min(dis[(k - 1) & 1][u][v], dis[(k - 1) & 1][u][k] + dis[(k - 1) & 1][k][v]);
			}
		}
	}
}
void output()
{
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)cout << dis[n & 1][i][j] << " ";
		cout << endl;
	}
}
int main()
{
	init();
	Floyd();
	output();
	return 0;
}

标签:min,int,短路,问题,Floyd,105,多源,dis
From: https://www.cnblogs.com/susenyang/p/17636363.html

相关文章

  • 拼接sql 参数化 where userId in(@userIds)的问题
    这里@userIds如果写成101,202,301翻译后的sql的where部分会是:whereuserIdin('101,202,301');而不是期待的:whereuserIdin(101,202,301);前者前后多了引号。 在我使用ef.core连接mysql查询时,我这样写,就出现查出来的数据比sql脚本查出来的数据要少几条的情况。所以这样写......
  • 谷歌扩展相关问题及解决方案
    1、谷歌扩展的background:浏览器扩展页面分为background和popup,具体就不多解释啦其中background部分是常驻浏览器的,在manifest.json配置中可以配置多个js,但是只能配置一个html,且是二选一不能两个都配置的。但是往往需求是多变的,那么如果需要多个html在background,两种方案:1、在......
  • 减法平均优化算法(SABO)求解单目标优化问题附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 减法平均优化算法(SABO)求解单目标优化问题附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 基于斑马优化算法Zebra Optimization Algorithm求解单目标优化问题附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 【Azure Service Fabric】关于Service Fabric的相关问题
    问题一:ServiceFabric是否支持PrivateLink?在AzurePrivateEndpoint文档中,罗列出了Azure上支持PrivateLink的服务。ServiceFabric不在其中。AzurePrivateLinkavailability:https://learn.microsoft.com/en-us/azure/private-link/availability 问题二:是否可以Disable......
  • JVM调优(十七)JVM常见调优问题和工具的使用
    JVM调优(十七)JVM常见调优问题和工具的使用说辞熟悉GC常见算法熟悉常见的垃圾回收器,具有实际JVM调优经验1什么是调优根据需求进行JVM优化和预调优优化JVM的运行环境(慢、卡顿)解决JVM运行过程中出现的各种问题(OOM)2JVM常用调优命令jps:JDK自带,全称javaprocess,列出系......
  • 关于element ui table回选的问题思考
    业务需求选设备,左侧树,右侧是树,下方是element的tag原先版本是左右都是树,这样出现了一个问题当左侧是虚拟滚动树的时候,展开的节点过多,右侧点击全选的时候会很慢,原因:查看源码之后发现,tree-store.js中,elementui在树注册的时候,getAllNodes是页面中所有的节点,意思就是把其他的树节......
  • vscode git突然失效问题解决
    一:首先配置‘环境变量’打开电脑‘设置’----->关于--->高级系统设置---->环境变量------>用户和系统变量都设置一下,点击Path------->新建-------->将git-bash的应用程序地址粘贴到里面----->一直点击确定,直到退出(这里的应用程序地址看自己保存的bash.exe的位置)我的是:C:\Program......
  • 【Azure Service Fabric】关于Service Fabric的相关问题
    问题一:ServiceFabric是否支持PrivateLink?在AzurePrivateEndpoint文档中,罗列出了Azure上支持PrivateLink的服务。ServiceFabric不在其中。AzurePrivateLinkavailability:https://learn.microsoft.com/en-us/azure/private-link/availability 问题二:是否可以Dis......