2.6学习总结

news2024/11/12 23:30:55

2.6
1.蓝桥公园
2.路径
3.打印路径
4.【模板】Floyd

Floyd算法:

是一种多源的最短路径算法,经过一次计算可以得到任意两个点之间的最短路径。

这种算法是基于动态规划的思想:

m[i][j]表示从i到j这条边的距离,dp[k][i][j]表示从i到j且经过{0,1,...,k-1}中若干点的最短路径。

那么转移方程就就是dp[k][i][j]=min(dp[k−1][i][j],dp[k−1][i][k]+dp[k−1][k][j])这表示了比较经过k和不经过k两种的情况的路径,找到较小值

例如,在k=1的时候,
d p [ 1 ] [ i ] [ j ] = m i n ( d p [ 0 ] [ i ] [ j ] , d p [ 0 ] [ i ] [ 1 ] + d p [ 0 ] [ 1 ] [ j ] ) = m i n ( m [ i ] [ j ] , m [ i ] [ 1 ] + m [ 1 ] [ j ] )         

通过滚动数组,我们可以优化dp数组的空间,将他从三维的数组变成二维的

dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j])

与其他最短路径相比Floyd算法有以下几点特点:

1.可以找到所有节点之间的最短距离

2.代码简单,就三重循环

3.效率比较低,是O(n^3)的时间复杂度

这是算法的模版:

void floyd(){
	for (int k=1;k<=n;++k){
		for (int i=1;i<=n;++i){
			for (int j=1;j<=n;++j){
				if(i!=j)dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
				else dp[i][j]=dp[j][i]=0;
			}
		}
	}
}

蓝桥公园:https://www.lanqiao.cn/problems/1121/learning/?page=1&first_category_id=1&status=2

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x& - (x))
#define int long long
const int INF=0x3f3f3f3f3f3f3f3fll; 
const int N=405;
int dp[N][N];
int n,m,q;
void input(){
	memset(dp,0x3f,sizeof(dp));
	for (int i=1;i<=m;++i){
		int u,v,w;
		cin>>u>>v>>w;
		dp[u][v]=dp[v][u]=min(dp[u][v],w);
	}
}
void fioyd(){
	for (int k=1;k<=n;++k){
		for (int i=1;i<=n;++i){
			for (int j=1;j<=n;++j){
				dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
			}
		}
	}
}
void output(){
	while (q--){
		 int s,t; cin>>s>>t;
		if (s==t) cout<<0<<endl;
		else if (dp[s][t]==INF) cout<<-1<<endl;
		else cout<<dp[s][t]<<endl;
	}
}
signed main(){
	cin>>n>>m>>q;
	input(); fioyd();  output();
	return 0;
}

路径:https://www.lanqiao.cn/problems/1460/learning/?page=1&first_category_id=1&problem_id=1460

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x& - (x))
#define int long long
const int INF=0x3f3f3f3f;
const int N=2050;
int dp[N][N];
int gcd(int a,int b){
	if (b==0) return a;
	return gcd(b,a%b);
}
void floyd(){
	for (int k=1;k<=2021;++k){
		for (int i=1;i<=2021;++i){
			for (int j=1;j<=2021;++j){
				dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
			}
		}
	}
}
signed main(){
	for (int i=1;i<2021;++i){
		for (int j=i+1;j<=2021;++j){
			if (abs(i-j)>21){
				dp[i][j]=dp[j][i]=INF;
			}else if (abs(i-j)<=21){
				dp[i][j]=dp[j][i]=(i*j)/gcd(i,j);
			}
		}
	}
	floyd();
	cout<<dp[1][2021];
}
打印路径:https://www.lanqiao.cn/problems/1656/learning/?page=1&first_category_id=1&problem_id=1656

这道题需要的点比较多,需要记录最短路径,还有每个 城市都会收税,记录最短路径的话,就再建一个二维数组,记录每个点之间的关系

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x& - (x))
#define int long long
const int INF=0x3f3f3f3f;
const int N=505;
int n;
int dp[N][N],shui[N],path[N][N];
void input(){
	cin>>n;
	for (int i=1;i<=n;++i){
		for (int j=1;j<=n;++j){
			int x;	cin>>x;
			if (x==-1) dp[i][j]=dp[j][i]=INF;
			else{
				dp[i][j]=dp[j][i]=x;
			}
			path[i][j]=j;
		}
	}
	for (int i=1;i<=n;++i) cin>>shui[i];
}
void floyd(){
	for (int k=1;k<=n;++k){
		for (int i=1;i<=n;++i){
			for (int j=1;j<=n;++j){
				if (dp[i][j]>dp[i][k]+dp[k][j]+shui[k]){
					dp[i][j]=dp[i][k]+dp[k][j]+shui[k];
					path[i][j]=path[i][k];
				}else if (dp[i][k]+dp[k][j]+shui[k]==dp[i][j] && path[i][k]<path[i][j]){
					dp[i][j]=dp[i][k]+dp[k][j]+shui[k];
					path[i][j]=path[i][k];
				}
			}
		}
	}
}
void output(){
	int s,t;
	while (cin>>s>>t){
		if (s==-1 && t==-1)break;
		cout<<"From "<<s<<" to "<<t<<" :"<<endl;
		cout<<"Path: "<<s;
		int idx=s;
		while (idx!=t){
			idx=path[idx][t];
			cout<<"-->"<<idx;
		}
		cout<<endl;
		cout<<"Total cost : "<<dp[s][t]<<endl<<endl;
	}
}
signed main(){
	input(); floyd(); output();
	return 0;
}

【模板】Floydhttps://www.luogu.com.cn/problem/B3647

题目描述

给出一张由 �n 个点 �m 条边组成的无向图。

求出所有点对 (�,�)(i,j) 之间的最短路径。

输入格式

第一行为两个整数 �,�n,m,分别代表点的个数和边的条数。

接下来 �m 行,每行三个整数 �,�,�u,v,w,代表 �,�u,v 之间存在一条边权为 �w 的边。

输出格式

输出 �n 行每行 �n 个整数。

第 �i 行的第 �j 个整数代表从 �i 到 �j 的最短路径。

输入输出样例

输入 #1复制

4 4
1 2 1
2 3 1
3 4 1
4 1 1

输出 #1复制

0 1 2 1
1 0 1 2
2 1 0 1
1 2 1 0

说明/提示

对于 100%100% 的数据,�≤100n≤100,�≤4500m≤4500,任意一条边的权值 �w 是正整数且 1⩽�⩽10001⩽w⩽1000。

数据中可能存在重边。

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x& - (x))
#define int long long
const int INF=0x3f3f3f3f;
const int N=505;
int n,m;
int dp[N][N];
void floyd(){
	for (int k=1;k<=n;++k){
		for (int i=1;i<=n;++i){
			for (int j=1;j<=n;++j){
				if(i!=j)dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
				else dp[i][j]=dp[j][i]=0;
			}
		}
	}
}
signed main(){
	cin>>n>>m;
	memset(dp,INF,sizeof(dp));
	for (int i=1;i<=m;++i){
		int a,b,c;
		cin>>a>>b>>c;
		dp[a][b]=dp[b][a]=min(dp[a][b],c);	//防止重边 
	}
	floyd();
	for (int i=1;i<=n;++i){
		for (int j=1;j<=n;++j){
			cout<<dp[i][j]<<" ";
		}
		cout<<endl;
	}
	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1437607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【代码随想录24】93.复原 IP 地址 78.子集 90.子集II

目录 93.复原IP地址题目描述参考代码 78.子集题目描述参考代码 90.子集II题目描述参考代码 93.复原IP地址 题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如…

【iOS】——使用ZXingObjC库实现条形码识别并请求信息

文章目录 前言一、实现步骤二、扫描界面和扫描框的样式1.扫描界面2.扫描框 三、实现步骤 前言 ZXing库是一个专门用来解析多种二维码和条形码&#xff08;包括包括 QR Code、Aztec Code、UPC、EAN、Code 39、Code 128等&#xff09;的开源性质的处理库&#xff0c;而ZingObjC库…

开源微服务平台框架的特点是什么?

借助什么平台的力量&#xff0c;可以让企业实现高效率的流程化办公&#xff1f;低代码技术平台是近些年来较为流行的平台产品&#xff0c;可以帮助很多行业进入流程化办公新时代&#xff0c;做好数据管理工作&#xff0c;从而提升企业市场竞争力。流辰信息专业研发低代码技术平…

点云transformer算法: FlatFormer 论文阅读笔记

代码&#xff1a;https://github.com/mit-han-lab/flatformer论文&#xff1a;https://arxiv.org/abs/2301.08739[FlatFormer.pdf] Flatformer是对点云检测中的 backbone3d部分的改进工作&#xff0c;主要在探究怎么高效的对点云应用transformer 具体的工作如下&#xff1a;一…

【C语言——打印乘法口诀表】

乘法表&#xff1a; 我们可以定义一个i控制行的变化&#xff0c;外加看上图的表得知我们需要用到循环结构&#xff0c;i是行需要不停的加加&#xff0c;因此&#xff0c;for循环比较好用&#xff0c;可以用两个嵌套的循环&#xff0c;外层循环即用到的i表示的是每一行的打印&am…

泰雷兹和Quantinuum推出入门套件,帮助企业为未来的后量子加密变革做好准备

•新的解决方案——PQC入门套件(PQC Starter Kit)为用户提供了一种快速、简便的方法&#xff0c;用于测试和衡量其在后量子时代防范量子计算攻击的准备情况 •随着量子计算逐渐成熟&#xff0c;企业为后量子时代做好准备并培养加密灵活性&#xff0c;对于降低数据泄露风险至关重…

BurpSuite测试上传文件xss漏洞教程

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/136061771 目录 目录 1.下载地址 Loader Keygen下载 Loader Keygen使用 2.Proxy SwitchyOmega代理 3.文件xss漏洞测试 启动…

游戏服务器多少钱一台?腾讯云32元,阿里云26元

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;可以选择轻量应用服务器和云服务器&#xff0c;阿腾云atengyu…

Jina AI 请回答 2023

年 度 回 顾 - Jina AI - 2023 年&#xff0c;正如它所对应的生肖“兔”&#xff0c;充满活力和智慧。AI 技术在全球范围内的颠覆性发展&#xff0c;让 2023 年成为大家公认的人工智能元年。作为从四年前成立起&#xff0c;就专注于多模态 AI 技术研发的前沿科技公司&#xff0…

年货大数据(年货节数据/电商行业数据):龙年再添两个黑马食品饮料品类,增长11倍!

年货零食三大件&#xff1a;牛奶、糖果和炒货。今年再多两大件&#xff0c;礼品卡券和腊味。 根据鲸参谋数据显示&#xff0c;今年坚果炒货、糖果、牛奶乳品、饮料等品类依然是长期的年货热门品类。1月前三周&#xff0c;牛奶乳品销量环比增长68%&#xff0c;销售额环比增长55…

【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 (上篇)

在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 &#xff08;上篇&#xff09; 项目介绍 YOLOv5 是革命性的 "单阶段"对象检测模型的第五次迭代&#xff0c;旨在实时提供高速、高精度的结果&#xff0c;是世界上最受欢迎的视觉人工智能模型&#xff0c;代表了Ult…

《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)

文章目录 1.1 Git 简介&#xff1a;版本控制的演变1.1.1 基础知识讲解1.1.2 重点案例&#xff1a;协作开发流程优化案例&#xff1a;功能开发与分支策略 1.1.3 拓展案例 1&#xff1a;代码审查与合并1.1.4 拓展案例 2&#xff1a;冲突解决 1.2 安装和配置 Git&#xff1a;首次设…

一文搞懂MOS管!

MOS管 1.原理 金属-氧化物半导体场效应晶体管 G&#xff1a;gate 栅极&#xff1b;S&#xff1a;source 源极&#xff1b;D&#xff1a;drain 漏极 P沟道型和N沟道型管&#xff08;箭头指向G极的是N沟道&#xff09; 增强型管&#xff1a;栅极-源极电压 Vgs 为零时Ids电流…

JavaScript基础第三天

JavaScript 基础第三天 今天我们学习for循环、while循环、终止循环和无限循环。 1. for 循环 1.1. 语法 // 1. 语法格式 // for(起始值; 结束条件; 累加器) { // // 要重复执行的代码 // }1.2. 示例代码 let sum 0; for (let i 0; i < 100; i) {sum i; } alert(&q…

Facebook的数字安全使命:社交平台的责任

在数字化的时代&#xff0c;社交媒体已经成为人们生活不可或缺的一部分&#xff0c;而数字安全问题也随之成为社交平台亟待解决的挑战。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅肩负着连接世界的使命&#xff0c;更担负着保障用户数字安全的责任。本文将深入研…

基于 SpringBoot 和 Vue.js 的权限管理系统部署教程

大家后&#xff0c;我是 jonssonyan 在上一篇文章我介绍了我的新项目——基于 SpringBoot 和 Vue.js 的权限管理系统&#xff0c;本文主要介绍该系统的部署 部署教程 这里使用 Docker 进行部署&#xff0c;Docker 基于容器技术&#xff0c;它可以占用更少的资源&#xff0c;…

Prompt Engineering实战-构建“哄哄模拟器”

目录 一 背景 二 “哄哄模拟器”的Prompt Prompt 的典型构成 三 操作步骤 3.1 创建对话 3.2 游戏测试 一 背景 前几天《AI 大模型全栈工程师》第二节课讲了“Prompt Engineering&#xff0c;提示工程”&#xff0c;里面提到一些prompt相关的技巧&#xff0c;原则&#xf…

书客、孩视宝、松下大路灯怎么选?耗费30天对比揭秘热门大路灯!

现如今&#xff0c;随着人们的生活水平在不断提高&#xff0c;科技人才以及学生人群的压力也越来越大&#xff0c;长时间的工作和学习&#xff0c;眼睛也面临着巨大的压力&#xff0c;导致一系列眼睛疲劳、酸痛、视力下降的情况发生&#xff0c;这时用眼必备的照明神器——大路…

《Java程序设计》实验报告(三)之常用类和集合类

实验内容及步骤&#xff1a; 编写String类的程序。&#xff08;1&#xff09;代码&#xff1a; public class TeatString3 { public static void main(String[] args) { String str"abcd"; System.out.print("将字符串转换为字符数组后…

web 前端实现一个根据域名的判断 来显示不同的logo 和不同的标题

1.需求 有可能我做一个后台 web端 我想实现一套代码的逻辑 显示不同的公司主题logo以及内容&#xff0c;但是实际上 业务逻辑一样 2.实现 建一个store oem.ts 这个名为是 oem系统 oem.ts import { defineStore } from pinia;import { store } from /store;const oemDataLis…