图论 之 BFS

文章目录

  • 3243.新增道路查询后的最短距离
  • 1311.获取你好友已观看的视频

BFS:广度优先搜索(BFS) 是一种常用的算法,通常用于解决图或树的遍历问题,尤其是寻找最短路径或层级遍历的场景。BFS 的核心思想是使用队列(FIFO 数据结构)来逐层遍历节点。

  • 模版
from collections import deque
# graph
def bfs(start):# 初始化队列,并将起始节点加入队列queue = deque([start])# 初始化 visited 集合,记录已访问的节点visited = set([start])while queue:# 从队列中取出当前节点node = queue.popleft()# 处理当前节点(例如打印、判断条件等)# 遍历当前节点的邻居for neighbor in graph[node]:if neighbor not in visited:# 将未访问的邻居加入队列,并标记为已访问queue.append(neighbor)visited.add(neighbor)

BFS求解最短距离:必要的条件是每条边的权值都是1

  • 最短距离的求解:分为求解start到end,以及start到剩余节点的问题
def bfs(start,end):queue = deque([start])# 可以记录是否访问过,还可以记录距离visited = {start:0}while queue:node = queue.popleft()if node == end:return visited[node]# friends是邻接表for neigh in friends[node]:if neigh not in visited:# 距离的更新visited[neigh] = visited[node] +  1queue.append(neigh)
  • 最短路径,求解start到其余节点的距离,区别在于删除了那个if node == end的判断
from collections import deque
# 这个friend是邻接表
def bfs(start):# 初始化队列,将起始节点加入队列queue = deque([start])# 记录每个节点是否被访问过以及从起始节点到该节点的最短距离# 初始时,起始节点的距离为 0visited = {start: 0}while queue:# 从队列中取出一个节点node = queue.popleft()# 遍历该节点的所有邻居节点for neigh in friends[node]:if neigh not in visited:# 如果邻居节点未被访问过,更新其距离为当前节点距离加 1visited[neigh] = visited[node] + 1# 将邻居节点加入队列,以便后续继续遍历其邻居queue.append(neigh)return visited

3243.新增道路查询后的最短距离

3243.新增道路查询后的最短距离

在这里插入图片描述

思路分析:

from collections import dequeclass Solution:def shortestDistanceAfterQueries(self, n: int, queries: List[List[int]]) -> List[int]:# 初始化邻接表edge = [[] for _ in range(n)]for i in range(n - 1):edge[i].append(i + 1)  # 添加单向边# BFS 函数,计算从 start 到 end 的最短距离def bfs(start, end):queue = deque([start])visited = {start: 0}  # 记录每个节点的距离,也能记录是否被访问过while queue:node = queue.popleft()if node == end:return visited[node]  # 返回最短距离for neigh in edge[node]:  # 遍历当前节点的邻居if neigh not in visited:# 注意的是这个距离的更新方式visited[neigh] = visited[node] + 1  # 更新距离queue.append(neigh)# 处理查询ans = []for p, q in queries:edge[p].append(q)  # 添加新边ans.append(bfs(0, n - 1))  # 计算最短距离return ans

1311.获取你好友已观看的视频

311.获取你好友已观看的视频

在这里插入图片描述

思路分析:

我的力扣题解

from collections import deque,defaultdict,Counter
class Solution:def watchedVideosByFriends(self, watchedVideos: List[List[str]], friends: List[List[int]], id: int, level: int) -> List[str]:# 首先我们只需记录你的朋友的级别!也就是最短距离,在最短距离的模版基础上修改即可# 后面再遍历即可# 难处在于什么都没有构建,不过这个friends就是相当于邻接表了# 我们只需计算start,enddef bfs(start,end):queue = deque([start])visited = {start:0}while queue:node = queue.popleft()if node == end:return visited[node]for neigh in friends[node]:if neigh not in visited:visited[neigh] = visited[node] +  1queue.append(neigh)n = len(watchedVideos)video = []ans = []for i in range(n):if bfs(id,i) == level:video.extend(watchedVideos[i])# 去重吧ans = list(set(i for i in video))count = Counter(video)ans_sorted = sorted(ans, key=lambda x: (count[x], x))return ans_sorted

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

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

相关文章

ollama stream“:True django如何返回数据

在使用 Django 框架开发 Web 应用时,如果你想要通过 Ollama 流式返回数据,你可以通过 Django 的 HttpResponse 或者 StreamingHttpResponse 来实现。Ollama 主要用于处理文本生成任务,如聊天机器人、自动完成等,通常这些任务会产生…

为什么要用 const 和 let,而不是 var?

JavaScript 中有三种方式声明变量:var、let 和 const。其中,var 是早期版本的 JavaScript 中的标准,但随着 ECMAScript 6(ES6)引入了 let 和 const,var 的种种问题也显现出来。今天,我们将探讨为…

从零开始玩转TensorFlow:小明的机器学习故事 2

你好,TensorFlow!——从零开始的第一个机器学习程序 1. 为什么要写这个“Hello, TensorFlow!”? 无论学习什么新语言或新框架,“Hello World!”示例都能帮助我们快速确认开发环境是否就绪,并掌握最基本的使用方式。对…

【Java八股文】10-数据结构与算法面试篇

【Java八股文】10-数据结构与算法面试篇 数据结构与算法面试题数据结构红黑树说一下跳表说一下?LRU是什么?如何实现?布隆过滤器怎么设计?时间复杂度? 排序算法排序算法及空间复杂度 数据结构与算法面试题 数据结构 红…

Docker换源加速(更换镜像源)详细教程(2025.2最新可用镜像,全网最详细)

文章目录 前言可用镜像源汇总换源方法1-临时换源换源方法2-永久换源(推荐)常见问题及对应解决方案1.换源后,可以成功pull,但是search会出错 补充1.如何测试镜像源是否可用2.Docker内的Linux换源教程 换源速通版(可以直…

华为云deepseek大模型平台:deepseek满血版

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 1、注册: 华为云deepseek大模型平台注册:https://cloud.siliconflow.cn/i/aDmz6aVN 说明:填写邀请码的话邀请和被邀请的账号都会获得2000 万 Tokens;2个帐号间不会与其他关联…

抓包工具是什么?

抓包工具是一种用于捕获和分析网络数据包的软件或硬件设备。它可以帮助用户监控网络通信过程,查看网络中传输的数据内容、协议类型、源地址、目的地址等信息。以下是关于抓包工具的一些详细解释: 1. 主要功能 捕获数据包:抓包工具能够实时捕…

51c大模型~合集71

我自己的原文哦~ https://blog.51cto.com/whaosoft/12260659 #大模型推理加速技术的学习路线 EfficientQAT 可以在 41 小时内在单个 A100-80GB GPU 上完成对 2-bit Llama-2-70B 模型的量化感知训练。与全精度模型相比,精度仅下降了不到 3%(69.48 v…

OpenBMC:BmcWeb实例化App

BmcWeb是OpenBMC的一个核心模块,对外负责响应Redfish请求,并且由于OpenBMC的Web使用的Redfish api,所以BmcWeb也是Web的后台。 1.main函数 //src\webserver_main.cpp #include "webserver_run.hpp"int main(int /*argc*/, char**…

利用AI优化可再生能源管理:Python让绿色能源更高效

利用AI优化可再生能源管理:Python让绿色能源更高效 引言 在全球气候变化和能源危机的背景下,可再生能源的利用变得尤为重要。然而,可再生能源的管理和优化面临诸多挑战,如能源生产的不稳定性和能源需求的波动性。幸运的是&#…

改BUG:Mock测试的时候,when失效

问题再现: 这里我写了一测试用户注册接口的测试类,并通过when模拟下层的服务,但实际上when并没有奏效,还是走了真实的service层的逻辑。 package cn.ac.evo.review.test;import cn.ac.evo.review.user.UserMainApplication; imp…

单片机 code RO-data RW-data ZI-data以及OTA学习

带着问题去学习:这些数据是什么?分别放在哪里, 是什么:我个人的理解 code 和RO-data 分别是代码和只读数据,RW-data以及ZI-data分别是读写数据和初始化数据。 codeRO-data的大小正好是所占用ROM的大小,RO…

什么是LoRA微调

LoRA是大模型微调方法的一种,它的特点是只在模型的 部分权重(如 QKV 矩阵) 上 添加可训练参数 通过 低秩矩阵(AB) 来优化参数更新 优点: 极大降低显存消耗(deepseek 7B 只需 10GB) 适…

EasyRTC低延迟通信与智能处理:论嵌入式WebRTC与AI大模型的技术融合

在当今数字化时代,实时通信的需求日益增长,视频通话作为一种高效、直观的沟通方式,广泛应用于各个领域。WebRTC技术的出现,为实现浏览器之间的实时音视频通信提供了便捷的解决方案。而基于WebRTC技术的EasyRTC视频通话SDK&#xf…

10、k8s对外服务之ingress

service和ingress的作用 service的作用 NodePort:会在每个节点开放一个端口,端口号30000-32767。 也是只能用于内网访问,四层转发。实现负载均衡。不能基于域名进行访问。 clusterip:service的默认类型,只能在集群…

Java数据结构---栈

目录 一、栈的概念 二、栈的基本方法 三、栈的模拟实现 四、栈的练习 1、括号匹配 2、出栈入栈次序匹配 一、栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底…

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践(遥感图像场景分类)专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…

php-fpm

摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器,管理PHP的FastCGI进程,提升PHP应用的性能和稳定性 php-fpm是一个高性能的php FastCGI管理器,提供了更好的php进程管理方式,可以有效的控制内存和进程,支…

Python strip() 方法详解:用途、应用场景及示例解析(中英双语)

Python strip() 方法详解:用途、应用场景及示例解析 在 Python 处理字符串时,经常会遇到字符串前后存在多余的空格或特殊字符的问题。strip() 方法就是 Python 提供的一个强大工具,专门用于去除字符串两端的指定字符。本文将详细介绍 strip(…

open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题

项目地址:GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 选择了docker部署 如果 Ollama 在您的计算机上,请使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…