最短路径——Floyd算法、Dijkstra算法(未完...)

这里写目录标题

  • 例题引入: 路径——蓝桥2021省赛
  • 题目分析
  • 题解
  • !!!求最短路径问题!!!
    • 应用场景
    • 图的基础
    • Floyd算法
      • Acwing-843.有边数限制的最短路
      • 简单的思路讲解
    • Dijkstra算法

例题引入: 路径——蓝桥2021省赛

在这里插入图片描述

题目分析

  • 求最短路径
  • 求最小公倍数

题解

!!!求最短路径问题!!!

  • 求最短路径—》会想到什么解题思路?
  • 我最先想到的是:dfs和bfs(最短路径,这俩求解肯定没问题)
  • 然后我又想到了dp(动态规划):因为有初始状态和最后一步(求两点之间的最短路径)。那我要是用dp[i]表示到i点的最短路径,有没有可能写出状态转移方程呢?
    但因为我知道最短路径问题有现成的算法去解题,所以,先学一下吧。
    至于dp能不能解的出来,怎么解,之后有时间回来研究

应用场景

  • 管道铺设,线路安装,地图规划等路径问题
  • 例:
    • 旅行规划:想知道任意两个城市之间的最短路径——用Floyd算法

图的基础

时间来不及,先整个大纲。之后会补充 重点先放在两个算法上

  • 图的基本概念(可对应好友关系)
    • 顶点:用户
    • :俩用户是好友,那俩人之间就有一条边连着
    • :某用户的好友数量。有向图中,还分入度(指进来的)和出度(指出去的)
    • 无向图和有向图
      • 无向图:没箭头的图(不关注指哪)
      • 有向图:有箭头的图(关注二者间关系的)
    • 无权图和有权图
      (权就是指,俩人的亲密度)
      • 无权图:没数字的(不关注关系的亲密度)
      • 有权图:有数字的(关注俩人的亲密度)

这是一个带权的有向图(图片来自:JavaGuide)

在这里插入图片描述

  • 图的存储
    存一个图最简单的方式就是——存到一个二维数组里(优点:找顶点间关系高效;缺点:费空间)

像这样(图片来自:JavaGuide)

在这里插入图片描述

Floyd算法

Acwing-843.有边数限制的最短路

给定一个n个点m条边的有向图,图中可能存在重边和自环,

简单的思路讲解

求任意两点间的最短路径问题(如图)

在这里插入图片描述

  • 先来想
  • 假设我们要求顶点1到顶点3间的最小路径 首先,1到3 自己就有一条权值为6的路径
  • 然后,通过图 可以很明显的知道,1到3,可以通过在顶点2中转 到达,其路径值为2+3=5;
  • 而5<6 这时,需要更新1到3的最短路径为5

归纳一下:

  • 在找任意两点间的最短路径时,显然是不仅要找直接路径,还要找从中转点到达的路径,比较之后,才能得出两点间的最短路径
  • 而中转点基本上都不止一个—》怎么有逻辑的给他表示出来呢?
  • 我们来推一下
  • 我们用e[n+1][n+1] 来存放这个图(因为for循环中用1~n比较好表示),其中,e[i][j] 表示i到j的最短路径
  • 假设现在只允许经过顶点1中转,求任意两点(i到j)的最短路径
    –》只需要判定e[i][1]+e[1][j] 是否比 e[i][j]小 即可
  • 怎么写
    //经过顶点1中转
//经过顶点1中转
for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
		if(e[i][j] > e[i][1]+e[1][j]){
			e[i][j] = e[i][1]+e[1][j];
		}

//同理,经过顶点1和顶点2中转呢?

//经过顶点1
for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
		if(e[i][j] > e[i][1] + e[1][j]){
			e[i][j] = e[i][1] + e[1][j];
		}	
//经过顶点2
for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
		if(e[i][j] > e[i][2] + e[2][j]){
			e[i][j] = e[i][2] + e[2][j];
		}

//同理,经过3,4顶点也是这样
//把他们合并到一块写

for(int k=1;k<=n;k++)	//依次经过1~n中的第k个点进行中转
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(e[i][j] > e[i][k] + e[k][j]){
				e[i][j] = e[i][k] + e[k][j];
			}

Dijkstra算法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

随后迎来了不少互联网公司与华为鸿蒙原生应用达成了合作&#xff0c;像我们常见的阿里、京东、小红书、得物……等公司&#xff0c;还有一些银行也都与华为鸿蒙达成了合作。使得一时之间市场紧缺鸿蒙开发人才&#xff0c;不少公司不惜重金争抢人才。 据智联招聘的最新数据显示…

最强的营销团队,这样打造!

在瞬息万变的商业环境中&#xff0c;构建无可挑剔的营销团队结构的重要性毋庸置疑。营销团队的力量不仅在于其成员的个人才能&#xff0c;还在于这些才能如何有效地协调在一起。建立完美的营销团队结构类似于拼图。每块拼图都代表了独特的技能和视角&#xff0c;如果放置得当&a…

未来5年|个人电脑“变”AI PC

随着生成式AI热潮达到白热化阶段&#xff0c;笔记本电脑市场正面临一场范式转变。根据Tech Insights预测数据&#xff0c;到2029年&#xff0c;配备专用AI加速芯片&#xff08;即NPU&#xff09;的AI赋能笔记本电脑将在整个笔记本市场占据主导地位&#xff0c;占比高达95%&…

【MySQL】事务是什么?事务的特性又是什么?

文章目录 ✍事务是什么&#xff1f;✍事务的特性&#xff08;四个&#xff09;✍事务并发时出现的问题✍事务的隔离性 ✍事务是什么&#xff1f; 事务是由一个或多个SQL语句构成的&#xff0c;在事务中&#xff0c;这些的SQL不可分割&#xff0c;是一个整体&#xff0c;整个事…

牛客NC30 缺失的第一个正整数【simple map Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5 核心 Map参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可…

web前端之罗盘时钟、不一样的补零方式、LED字体、padStart

MENU 效果图htmlJavaScriptstyle 效果图 html <div class"clock"><div class"second-box"></div><div class"minute-box"></div><div class"hour-box"></div><div class"day-box&…

HarmonyOS 应用开发之Stage模型启动FA模型PageAbility

本小节介绍Stage模型的两种应用组件如何启动FA模型的PageAbility组件。 UIAbility启动PageAbility UIAbility启动PageAbility和UIAbility启动UIAbility的方式完全相同。 说明&#xff1a; 需注意FA模型中abilityName由bundleName AbilityName组成&#xff0c;具体见示例。 i…

蓝桥杯第十三届电子类单片机组程序设计

目录 前言 单片机资源数据包_2023 一、第十三届比赛省赛 1.比赛题目 2.赛题解读 二、部分功能实现 1.继电器的开启与关闭 2.长按切换显示状态功能的实现 3.对于温度传感器小数部分的处理 4.其他处理 1&#xff09;关于数码管显示小数的处理 2&#xff09;关于5s后继…

vue3+ts+elementplus写一个登录页面教程

文章目录 前言1. 安装 Vue CLI 和 TypeScript 支持2. 创建登录组件 文章重点内容 前言 前期准备步骤&#xff1a; 创建一个使用 Vue 3 和 TypeScript 的登录页面涉及到多个步骤。以下是一个基本的教程&#xff0c;帮助你从头开始构建这样一个页面&#xff1a; 1. 安装 Vue CL…

Ollama部署在线ai聊天

概述&#xff1a;虽然ollama在Windows方面还有很多bug&#xff0c;但不妨碍它在ai领域上面的成就 第一步&#xff1a;安装Ollama 官网&#xff1a;Download Ollama on Windows 下载安装即可。说明一下ollama的安装位置只能是c盘&#xff0c;好像改不了&#xff0c;但是数据模…

算法学习——LeetCode力扣动态规划篇8

算法学习——LeetCode力扣动态规划篇8 300. 最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删…

FA模型切换Stage模型之module的切换

从FA模型切换到Stage模型时&#xff0c;开发者需要将config.json文件module标签下的配置迁移到module.json5配置文件module标签下&#xff0c;具体差异见下列表格。 表1 FA模型module标签与Stage模型module标签差异对比 表2 FA模型metaData和Stage中metadata对比 表3 FA模型me…

【UI框架】——保姆式使用教程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

深度学习500问——Chapter05: 卷积神经网络(CNN)(2)

文章目录 5.6 有哪些池化方法 5.7 1x1卷积作用 5.8 卷积层和池化层有什么区别 5.9 卷积核是否一定越大越好 5.10 每层卷积是否只能用一种尺寸的卷积核 5.11 怎样才能减少卷积层参数量 5.12 在进行卷积操作时&#xff0c;必须同时考虑通道和区域吗 5.13 采用宽卷积的好处有什么 …

多线程JUC 第2季 synchornized和Lock锁(重入,公平)

一 锁 1.1 锁的介绍 synchronized&#xff0c;和lock锁都是一种悲观锁。悲观锁适用于写多场景&#xff0c;乐观锁适用于读多场景&#xff0c;实现策略有&#xff1a;版本号和cas自旋算法。 1.2 类锁和对象锁的使用场景 1.3 任何对象都有一把锁 之所以任何一个对象都有把锁…

html第二次作业

骨架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initi…

PyTorch深度学习快速入门(小土堆)

文章目录 16. 神经网络的基本骨架17.卷积操作18.卷积层 16. 神经网络的基本骨架 forward: import torch from torch import nnclass Tudui(nn.Module):def __init__(self):super().__init__()def forward(self,input):outputinput1return output#创建Tudui的实例对象 tuduiTu…

Django详细教程(二) - 部门用户管理案例

文章目录 前言一、新建项目二、新建app三、设计表结构四、新建数据库五、新建静态文件六、部门管理1.部门展示2.部门添加3.部门删除4.部门编辑 七、模板继承八、用户管理1.辨析三种方法方法一&#xff1a;原始方法方法二&#xff1a;Form组件(简便)方法三&#xff1a;ModelForm…

ARM-按键中断实验

代码 #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {//获取要处理的中断的中断号unsigned int irqnoGICC->IAR&0x3ff;switch (irqno){case 99:pr…

前端工程师————HTML5学习

HTML5基础 开发工具很多&#xff0c;其中Hbulider较好用&#xff0c;下载网址如下&#xff1a; DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架 html表示整个页面 head表示搜素框 body表示内容 ti…