圖論 之 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.pswp.cn/web/70402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70402.shtml
英文地址,請注明出處:http://en.pswp.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…