算法训练营第七十六天(最后一天、完结撒花) | Bellmanford之单源有限最短路、Floyd算法、A*算法

算法训练营最后一天 | Bellmanford之单源有限最短路、Floyd算法、A*算法

Bellmanford之单源有限最短路

题目连接:
https://kamacoder.com/problempage.php?pid=1154

在之前的基础上松弛k+1次而不是n+1次即可

#include <iostream>
#include <vector>
#include <list>
#include <climits>
using namespace std;int main() {int src, dst,k ,p1, p2, val ,m , n;cin >> n >> m;vector<vector<int>> grid;for(int i = 0; i < m; i++){cin >> p1 >> p2 >> val;grid.push_back({p1, p2, val});}cin >> src >> dst >> k;vector<int> minDist(n + 1 , INT_MAX);minDist[src] = 0;vector<int> minDist_copy(n + 1); // 用来记录上一次遍历的结果for (int i = 1; i <= k + 1; i++) {minDist_copy = minDist; // 获取上一次计算的结果for (vector<int> &side : grid) {int from = side[0];int to = side[1];int price = side[2];// 注意使用 minDist_copy 来计算 minDist if (minDist_copy[from] != INT_MAX && minDist[to] > minDist_copy[from] + price) {  minDist[to] = minDist_copy[from] + price;}}}if (minDist[dst] == INT_MAX) cout << "unreachable" << endl; // 不能到达终点else cout << minDist[dst] << endl; // 到达终点最短路径}

Floyd算法

题目链接:
https://kamacoder.com/problempage.php?pid=1155

#include <iostream>
#include <vector>
#include <list>
using namespace std;int main() {int n, m, p1, p2, val;cin >> n >> m;vector<vector<vector<int>>> grid(n + 1, vector<vector<int>>(n + 1, vector<int>(n + 1, 10005)));  // 因为边的最大距离是10^4for(int i = 0; i < m; i++){cin >> p1 >> p2 >> val;grid[p1][p2][0] = val;grid[p2][p1][0] = val; // 注意这里是双向图}// 开始 floydfor (int k = 1; k <= n; k++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {grid[i][j][k] = min(grid[i][j][k-1], grid[i][k][k-1] + grid[k][j][k-1]);}}}// 输出结果int z, start, end;cin >> z;while (z--) {cin >> start >> end;if (grid[start][end][n] == 10005) cout << -1 << endl;else cout << grid[start][end][n] << endl;}
}

A*算法

题目链接:
https://kamacoder.com/problempage.php?pid=1203

#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
int moves[1001][1001];
int dir[8][2]={-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2};
int b1, b2;
// F = G + H
// G = 从起点到该节点路径消耗
// H = 该节点到终点的预估消耗struct Knight{int x,y;int g,h,f;bool operator < (const Knight & k) const{  // 重载运算符, 从小到大排序return k.f < f;}
};priority_queue<Knight> que;int Heuristic(const Knight& k) { // 欧拉距离return (k.x - b1) * (k.x - b1) + (k.y - b2) * (k.y - b2); // 统一不开根号,这样可以提高精度
}
void astar(const Knight& k)
{Knight cur, next;que.push(k);while(!que.empty()){cur=que.top(); que.pop();if(cur.x == b1 && cur.y == b2)break;for(int i = 0; i < 8; i++){next.x = cur.x + dir[i][0];next.y = cur.y + dir[i][1];if(next.x < 1 || next.x > 1000 || next.y < 1 || next.y > 1000)continue;if(!moves[next.x][next.y]){moves[next.x][next.y] = moves[cur.x][cur.y] + 1;// 开始计算Fnext.g = cur.g + 5; // 统一不开根号,这样可以提高精度,马走日,1 * 1 + 2 * 2 = 5next.h = Heuristic(next);next.f = next.g + next.h;que.push(next);}}}
}int main()
{int n, a1, a2;cin >> n;while (n--) {cin >> a1 >> a2 >> b1 >> b2;memset(moves,0,sizeof(moves));Knight start;start.x = a1;start.y = a2;start.g = 0;start.h = Heuristic(start);start.f = start.g + start.h;astar(start);while(!que.empty()) que.pop(); // 队列清空cout << moves[b1][b2] << endl;}return 0;
}

训练营总结

陆陆续续刷了两个多月题目。基础得到了巩固,不会的东西也有了基本的了解,基本的知识体系是构建起来了。

之后还是要自己花时间去巩固后面图论和动规部分题目,很多都是看题解记住了思路之后去实现,并没有自己真的理解并且灵活运用,这样在面对各种各样变化莫测的笔试题的时候真的会吃大亏。

这次训练营,是我为了弥补大一上学期因为参加社团活动落下的功课而参加的。也确实弥补了当时因为自己能力不足、没有坚持下去而错失被选为正式成员的机会,而产生的很大的遗憾。

我知道自己很多方面做得还不够好,点赞量几乎没有,收藏量时有时无,评论量都是水出来的。博客链接放到简历里几乎也都挂了,而且期间参加的面试,做的项目都不怎么样。

难道我真的只有做一点小事做到很简单的水准,没法儿再提升了的潜力?我希望不是这样,也希望接下来的时间里,我能拿出实际行动推翻事实对我的否定,当然这否定也必然是我自己造成的。

不管怎么说,这才只是开始,后面的路会更难走,我也对即将到来的更大的磨难和挑战充满了期待。

当然,我还很无知,简直无知到我自己都无法忍受的地步,每天都想尽力往前再进一步,然而只能一步一步慢慢前进

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

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

相关文章

14-8 小型语言模型的兴起

过去几年&#xff0c;我们看到人工智能能力呈爆炸式增长&#xff0c;其中很大一部分是由大型语言模型 (LLM) 的进步推动的。GPT-3 等模型包含 1750 亿个参数&#xff0c;已经展示了生成类似人类的文本、回答问题、总结文档等能力。然而&#xff0c;虽然 LLM 的能力令人印象深刻…

AIOps与生成式人工智能的结合

AIOps&#xff08;智能化运维&#xff09;与生成式人工智能&#xff08;如ChatGPT等GenAI模型&#xff09;的结合是近期运维领域的一个重要热点。这种结合不仅提升了运维的智能化水平&#xff0c;还拓宽了AIOps的应用范围&#xff0c;为企业带来了诸多好处。以下是对AIOps与生成…

新能源行业知识体系-------2024内蒙古电力多边交易市场中长期交易相关事宜通知(讨论稿)

新能源行业知识体系-------主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/139946830 目录 0、读了这个文件我们该怎么去做一、为什么有这个文件二、交易规模三、市场主体四、“保量保价”优先发电计划安排五、区内电力交…

算法解题之双指针

简介 双指针技术是一种常见的算法设计思路,它通常适用于处理有序数组或链表等数据结构。双指针算法通过使用两个指针,同时从不同的方向遍历数组或链表,来解决一些特定的问题。 背景 双指针解题思路的产生背景主要有以下几个方面: 数据结构的特点 许多需要解决的算法问题都…

SonarWiz 8.0.1侧扫 浅剖 测深软件License获取

SonarWiz 8.0.1是功能强大的测绘软件&#xff01;提供强大的数据采集、后处理等功能操作&#xff0c;您将获得灵活完整的报告&#xff0c;并提供丰富的选项以便进行定制和更灵活的进行操作&#xff0c;软件功能齐全&#xff0c;包括完整的海底测绘解决方案&#xff0c;方便实时…

国产麒麟v10、UOS系统在线比较两个Word文件的内容差异

调用PageOffice的WordCompare方法&#xff0c;同时在线打开两个Word文档&#xff0c;可以切换显示其中的一个文档&#xff0c;或者显示两个文档的对比结果&#xff0c;即可实现在线的文档内容比较功能。此功能可以应用在以下方面&#xff1a; 文档管理中&#xff0c;比较两个版…

前端八股文 说一说样式优先级的规则是什么?

标准的回答 CSS样式的优先级应该分成四大类 第一类 !important&#xff1a; &#x1f604;无论引入方式是什么&#xff0c;选择器是什么&#xff0c;它的优先级都是最高的。 第二类 引入方式&#xff1a; &#x1f604;行内样式的优先级要高于嵌入和外链&#xff0c;嵌入和外链…

C++11|左、右值引用和移动语义

目录 一、左值引用 && 右值引用 1.1什么是左值&#xff1f;什么是左值引用&#xff1f; 1.2什么是右值&#xff1f;什么是右值引用&#xff1f; 1.3左值引用与右值引用比较 二、左、右值引用使用场景(为什么要有右值引用?) 2.1左值引用使用场景&#xff1a; 2.2右…

秋招突击——设计模式补充——简单工厂模式和策略模式

文章目录 引言正文简单工厂模式策略模式策略模式和工厂模式的结合策略模式解析 总结 引言 一个一个来吧&#xff0c;面试腾讯的时候&#xff0c;问了我单例模式相关的东西&#xff0c;自己这方面的东西&#xff0c;还没有看过。这里需要需要补充一下。但是设计模式有很多&…

数字IC设计-VCS和Verdi的使用

#学习记录# 前言&#xff1a;本文以一个简单的计数器来说明vcs和verdi的使用 1 代码文件 1.1 计数器代码 //Engineer&#xff1a;Mr-pn-junction module counter(input clk,input rst,output reg [5:0] count); always(posedge clk or negedge rst)beginif(!rst)coun…

【算法】(C语言):二分查找

二分查找&#xff1a; 获取查找区域的中间位置。若中间位置的数据就是要找的值&#xff0c;则返回true。若要找的值 小于 中间位置的数据&#xff0c;则往左边查找。若要找的值 大于 中间位置的数据&#xff0c;则往右边查找。重复1和2&#xff0c;若没有要找的值&#xff0c;…

LM-Cocktail:一种创新的模型合并方法打破预训练语言模型微调后的性能局限,实现语言模型在一般任务与特定领域的均衡高性能

LM-Cocktail:一种创新的模型合并方法打破预训练语言模型微调后的性能局限,实现语言模型在一般任务与特定领域的均衡高性能 使语言模型的微调类似于调制一杯精致的鸡尾酒。模型合并可用于提高单个模型的性能。我们发现此方法对于大型语言模型和密集嵌入模型也很有用,并设计了…

业界数据架构的演变

目录 一、概述 二、业务处理-单体架构 三、业务处理-微服务架构 四、数据分析-大数据Lambda架构 五、数据分析-Kappa架构 六、数据分析-LambdaKappa混合架构 七、湖仓一体架构 一、概述 近年来随着越来越多的大数据技术被开源&#xff0c;例如&#xff1a;HDFS、Spark等…

Linux 进程与服务管理:使用systemctl、service命令管理系统服务

Linux 进程与服务管理&#xff1a;使用systemctl、service命令管理系统服务 在Linux系统中&#xff0c;进程和服务的管理是系统运维的重要组成部分。随着Linux的发展&#xff0c;systemd成为了大多数现代Linux发行版的初始化系统&#xff0c;它提供了systemctl命令来管理系统服…

【Linux进程通信】共享内存

目录 共享内存函数 头文件 shmget ftok函数​ shmat shmdt shmctl 共享内存区是最快的IPC 形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到操作系统内核&#xff0c;换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据…

《向量数据库指南》——Milvus Cloud查询增强如何提升 RAG Pipeline 效果?

查询增强 1.假设性问题 这一方法首先使用LLM为每一条文档块生成一些假设问题,这些文档块可以回答与之对应的假设问题。在RAG阶段,进行一个query-to-query的搜索,先搜索到相关的假设问题,然后找到对应的文档块,再通过它们生成最后的回答。 这里的query-to-query指的是embed…

【数据库】仓库管理数据库(练习样例)

某连锁超市需要设计实现一个仓库管理系统&#xff0c;要求每个仓库可以有多名仓库管理员&#xff0c;每个仓库管理员只负责管理一个仓库&#xff0c;同时每个仓库都配备了一名仓库主管&#xff1b;不同的仓库存放的是不同类型的货品&#xff0c;每种货品只存放在固定的仓库中&a…

R语言数据分析案例40-华安中证基金多元线性回归和分析预测

一、引言 基金是一种非常受欢迎的投资工具&#xff0c;由于其具有风险分散、专业管理等特点&#xff0c;越来越多的投资者选择将资金投入基金市场。然而&#xff0c;基金的表现却受到很多因素的影响&#xff0c;如股票市场的整体表现、基金管理人员的能力、基金规模、基金管理…

SpringAOP如何控制只在生产环境执行AOP类

SpringAOP场景原理、如何在特定环境(如dev不执行、prod执行)不执行AOP 1、在定义AOP切面类的时候&#xff0c;用注解Profile&#xff0c; 再配合配置application.properties 的 spring.profiles.activeprod Aspect Component Profile("prod") public class LoggingA…

二二复制模式,发展下属并形成一个销售网络体系来实现收入增长!

二二复制模式&#xff0c;又称为双轨制&#xff0c;是一种直销理念的营销模式&#xff0c;其核心在于通过发展下属并形成一个销售网络体系来实现收入增长。以下是对二二复制模式的详细讲解&#xff0c;包括其优势和玩法介绍&#xff0c;以及适合的行业。 一、二二复制模式的定…