当前位置: 首页 > article >正文

Python图的存储与遍历全解:三种存储方式 +BFS/DFS

图是计算机中非常重要的非线性数据结构由节点顶点和边组成广泛应用于社交网络、路径规划、推荐系统等场景。在Python中实现图算法第一步就是解决图的存储问题第二步是掌握图的遍历核心算法。本文结合实战代码详细讲解图的三种主流存储方式邻接矩阵、邻接表、边集数组以及最常用的深度优先遍历DFS、广度优先遍历BFS新手也能轻松上手。本文默认讲解无向带权图边没有方向边有权重代码可无缝适配有向图/无权图。一、前置知识我们先统一符号定义方便理解代码n图的节点总数节点编号默认从0开始m图的边总数u, v边的两个端点w边的权重无权图可省略inf无穷大代表两个节点不直接相连二、Python 中图的三种存储方式图的存储没有绝对最优解根据图的稀疏程度选择存储方式是核心原则。1. 邻接矩阵邻接矩阵是最直观的存储方式用二维列表表示图行和列对应图的节点矩阵中e[u][v]的值表示节点u到v的边权重无连接则为无穷大inf代码实现# 定义无穷大必须提前定义inffloat(inf)# 输入节点数n边数mn,mmap(int,input().split())# 初始化n*n的邻接矩阵默认值为inf不连通e[[inf]*nfor_inrange(n)]# 输入m条边填充矩阵for_inrange(m):u,v,wmap(int,input().split())e[u][v]w# 有向图只写这一行e[v][u]w# 无向图边双向连通e[u][u]0# 自己到自己的权重为0e[v][v]0# 测试打印邻接矩阵forrowine:print(row)优缺点✅ 优点查询两点是否连通O(1)时间复杂度简单直观❌ 缺点空间复杂度高O(n²)稀疏图会造成大量空间浪费 适用场景稠密图边数接近n²2. 邻接表邻接表是工程中最常用的存储方式用一维列表存储列表下标对应节点编号每个下标存储一个子列表存放相邻节点边权重python用list实现与下图链表有点不一致思想是一致的。代码实现# 输入节点数n边数mn,mmap(int,input().split())# 初始化n个空列表对应n个节点的邻接表e[[]for_inrange(n)]# 输入m条边填充邻接表for_inrange(m):u,v,wmap(int,input().split())e[u].append((v,w))# 无向图双向添加边e[v].append((u,w))# 测试打印邻接表foriinrange(n):print(f节点{i}的邻接节点{e[i]})优缺点✅ 优点空间利用率极高O(nm)适合绝大多数场景❌ 缺点查询两点是否连通需要遍历节点的邻接边 适用场景稀疏图日常开发90%的场景 关键本文的遍历算法基于邻接表实现3. 边集数组边集数组是最简单的存储方式直接用一维列表存储所有边的信息不关心节点关系。代码实现# 输入节点数n边数mn,mmap(int,input().split())# 初始化空列表存储所有边e[]# 输入m条边直接追加到列表for_inrange(m):u,v,wmap(int,input().split())e.append((u,v,w))# 直接输出所有边print(边集数组,e)优缺点✅ 优点代码极简适合存储所有边❌ 缺点查询两点连通性效率极低O(m) 适用场景仅用于需要遍历所有边的算法如最小生成树❌ 不适合图的遍历三、深度优先搜索DFS图的遍历是指依次访问图中所有节点且每个节点仅访问一次。深度优先搜索DFS是最经典的遍历方式核心思想一路走到底走不通再回溯。代码解析基于邻接表你提供的DFS代码是递归实现简洁易懂# 定义集合记录已访问的节点避免重复访问sset()defdfs(u): DFS遍历函数 :param u: 当前遍历的起始节点 # 1. 访问当前节点打印输出print(u,end )# 2. 标记当前节点为已访问s.add(u)# 3. 遍历当前节点的所有邻接节点forv,_ine[u]:# 4. 如果邻接节点未被访问递归遍历ifvnotins:dfs(v)完整可运行代码整合邻接表DFS直接复制运行# 完整示例邻接表存储 DFS遍历n,mmap(int,input().split())e[[]for_inrange(n)]for_inrange(m):u,v,wmap(int,input().split())e[u].append((v,w))e[v].append((u,w))# DFS遍历sset()defdfs(u):print(u,end )s.add(u)forv,_ine[u]:ifvnotins:dfs(v)# 从节点0开始遍历dfs(0)测试用例输入5 5 0 1 1 0 2 1 1 3 1 1 4 1 2 4 1输出0 1 3 4 2四、广度优先搜索BFS除了DFS**广度优先搜索BFS**也是常用遍历方式核心思想一层一层遍历类似树的层序遍历用队列实现fromcollectionsimportdequedefbfs(start):qdeque()q.append(start)s.add(start)whileq:uq.popleft()print(u,end )forv,_ine[u]:ifvnotins:s.add(v)q.append(v)# 调用sset()bfs(0)五、总结存储方式选择稠密图 → 邻接矩阵稀疏图/日常开发 → 邻接表首选仅需存储边 → 边集数组遍历算法DFS递归实现适合深度探索、路径查找BFS队列实现适合最短路径、层序遍历掌握这三种存储方式和两种遍历算法你就可以轻松入门图的所有基础算法最短路径、最小生成树等啦

相关文章:

Python图的存储与遍历全解:三种存储方式 +BFS/DFS

图是计算机中非常重要的非线性数据结构,由节点(顶点)和边组成,广泛应用于社交网络、路径规划、推荐系统等场景。在Python中实现图算法,第一步就是解决图的存储问题,第二步是掌握图的遍历核心算法。 本文结合…...

用代码管理技能:构建结构化个人技能库的工程实践

1. 项目概述与核心价值最近在整理自己的技能栈时,发现了一个挺有意思的现象:很多开发者,包括我自己在内,对于“技能”的管理往往停留在简历上的一个列表,或者脑子里一个模糊的概念。当需要快速启动一个新项目、评估团队…...

AI智能提示词生成器——帮你更高效地使用AI解决问题

一款功能强大的Windows桌面应用程序,帮助用户快速生成标准化的AI提示词,支持多种行业和内容类型。 软件下载地址 功能特点 1. 丰富的提示词模板库 软件内置了庞大的提示词模板数据库,覆盖多个行业和场景: 分类行业/类型模板数…...

2026质量管控新趋势 FMEA避坑指南+六西格玛落地技巧

当下质量管控领域,“FMEA走过场”成为行业痛点,尤其在2026年第六届FMEA峰会后,这一话题持续升温,登上科技类热搜。不少技术从业者反馈,企业花大量时间填写FMEA表格,却依然挡不住现场故障频发,沦…...

2026年跨行业通吃的经管类黄金证书推荐

在数字经济纵深发展与人工智能技术广泛渗透的2026年,经济管理领域的人才需求范式发生了结构性转变。传统的单一专业技能边界日益模糊,企业对具备数据驱动决策、跨领域协同与敏捷管理能力的复合型人才需求迫切。在此背景下,系统性获取权威职业…...

胡桃讲编程|虚拟歌手星烁 R1 开发日志:技术落地清透少女音,九州网络技术研发全纪实

作者:龙沅可 大家好,我是胡桃~今天不谈算法与代码技巧,带大家沉浸式复盘一次虚拟歌手技术落地项目!由空晶宇宙全额投资并提供完整人设、核心资料,九州网络(组织)承接技术研发与模型…...

Linux 网络虚拟化深度解析:从 veth 设备对到容器网络实战

第一部分:veth 设备对 —— 虚拟世界的 "网线" 1.1 什么是 veth 设备对? veth(Virtual Ethernet)设备对,可以理解为软件模拟的一对 "虚拟网卡",它们总是成对出现,就像用一…...

绍兴geo优化:亲测高性价比公司分享

绍兴GEO优化:亲测高性价比公司分享 随着AI搜索流量占比持续攀升,绍兴企业正面临传统推广方式成本高、效率低的挑战。在这样的背景下,GEO(地理围栏优化)技术成为了提高本地精准流量获取的关键手段。本文基于最新的调研…...

深度解析 Gemini CLI:架构剖析、高级配置与自动化工作流的高级使用技巧报告

深度解析 Gemini CLI:架构剖析、高级配置与自动化工作流的高级使用技巧报告 Gemini Command Line Interface (CLI) 代表了终端环境下人工智能辅助开发的根本性范式转变。该工具并非仅仅是一个简单的应用程序接口(API)封装,而是一…...

从“抢人”到“识人”,回归匹配本质

金融校招如何穿透简历迷雾锁定真才? 在校园招聘的春季战场上,HR们往往陷入一种矛盾:一方面是后台爆满的简历收件箱,另一方面却是面试环节频频出现的“货不对板”。对于金融、咨询等对软素质要求极高的行业而言,校招实…...

Python课后感

今天把这几个笔记整理了一下,感觉对Python的理解又深了一点。先说包和模块这块吧。以前我老分不清啥是包啥是模块,现在明白了——每个.py文件就是个模块,而包其实就是个文件夹,只不过里面得有个__init__.py文件。这个文件挺有意思…...

掌握Windows虚拟显示技术:ParsecVDisplay打造高效多屏工作环境

掌握Windows虚拟显示技术:ParsecVDisplay打造高效多屏工作环境 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 在现代计算环境中,无论是远程办公、游戏直播…...

Python性能优化实战:Numba JIT编译器原理与高性能计算应用

1. 项目概述:当Python遇上性能瓶颈,Numba如何成为“救火队长”?在数据科学、科学计算和机器学习领域,Python以其简洁的语法和丰富的生态库(如NumPy、Pandas、SciPy)成为了事实上的标准语言。然而&#xff0…...

Kubernetes应用管理新范式:kapp-controller控制器模式详解与实践

1. 项目概述:Kubernetes应用管理的“控制器”模式新范式如果你在Kubernetes世界里摸爬滚打了一段时间,尤其是在尝试将应用打包、部署和生命周期管理进行标准化时,大概率会感到一丝疲惫。Helm Chart的模板、Kustomize的重叠、以及如何让这些配…...

Xenos DLL注入器:Windows系统动态加载完整指南

Xenos DLL注入器:Windows系统动态加载完整指南 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 在Windows系统开发和逆向工程领域,DLL注入技术是开发者和安全研究人员必须掌握的核心技能之一。X…...

AI应用开发脚手架:基于Next.js与LangChain的快速原型构建指南

1. 项目概述:一个为AI产品快速启动而生的脚手架最近在GitHub上闲逛,发现了一个名为ThanhWilliamLe/ai-product-bootstrap的项目,点进去一看,立刻就被吸引住了。这本质上是一个为AI应用开发者准备的“一站式”项目脚手架。如果你和…...

零基础录音转日程教程包教包会避坑,看完就能直接上手

做销售近5年,日常需频繁跑客户拜访、对接客户,每次沟通结束后,将录音整理成待办日程都十分繁琐,先和大家分享我之前踩过的一些坑,不少同行可能也有类似经历。第一个坑是误以为录音转日程,只需先将录音转成文…...

苏州配电工程为什么优先本地一站式厂家?

配电工程常见的落地痛点在苏州,各类配电工程项目数量众多,推进过程中普遍存在多方对接复杂、流程繁琐、责任推诿等问题。若将设计、生产、安装、售后等环节分别委托给不同单位,一旦出现问题,各方往往互相推诿,责任难以…...

基于 HarmonyOS 6.0 的校园闲置市集应用开发实战:从页面构建到跨端设计深度解析

基于 HarmonyOS 6.0 的校园闲置市集应用开发实战:从页面构建到跨端设计深度解析 前言 随着 HarmonyOS 生态不断完善,HarmonyOS 6.0 在分布式能力、跨端协同以及 ArkUI 声明式开发方面再次进行了大幅升级。相比传统 Android 页面开发模式,Harm…...

挑选工作效率提升工具,必这4个核心筛选标准

2026年挑选工作效率提升工具,尤其是多次尝试AI工具、希望找到合适选择的HR,不妨参考这四个核心筛选方向,减少不必要的试错时间。身边有位做招聘的HR小林,秋招高峰期一天安排8场面试,群面、结构化面试连轴转&#xff0c…...

GelSight 视触觉3D显微系统 4.4 软件版本上线,粗糙度测量维度全面拓展

近日,GelSight推出V4.4软件版本,同步适配 GelSight视触觉3D显微系统全系列产品,围绕3D表面形貌检测、表面粗糙度测量、无损弹性3D成像核心能力优化,为材料科学、精密制造、航空航天、增材制造等领域科研人员提供非接触式检测方案。…...

使用pretty-log美化终端日志:提升开发调试效率的实践指南

1. 项目概述:告别混乱,拥抱优雅的日志输出如果你是一名后端开发者,或者经常和服务器、命令行工具打交道,那么对下面这种日志格式一定不会陌生:[2024-05-27 14:30:22] [ERROR] [main] com.example.service.UserService …...

Prisma Relay游标分页库实战:解决GraphQL分页难题

1. 项目概述:一个解决分页痛点的利器如果你在构建一个使用 Prisma 和 GraphQL 的后端应用,并且正在为如何实现高效、标准化的 Relay 风格分页而头疼,那么devoxa/prisma-relay-cursor-connection这个库很可能就是你正在寻找的“瑞士军刀”。它…...

豪门贵公子具象化!庞钦宇现身TOD‘S家宴,举手投足间尽显骑士优雅

如果说马术是勇敢者的游戏,那么庞钦宇便是这场游戏中走出的优雅绅士。近日00后马术新星庞钦宇在TODS春日家宴上完成了一次惊艳的“跨界”。在这场汇聚名流与星光的盛事中,他褪去赛场的戎装,却未减半分骑士的矜贵。举手投足间这位年轻的骑手不…...

广州Ai直播公司供应商

随着互联网技术的快速发展,直播已经成为企业营销和品牌推广的重要手段。然而,传统的真人主播模式存在诸多痛点,如成本高、档期不稳定等。为了解决这些问题,广州有请科技有限公司(以下简称“有请科技”)应运…...

2026年3月 电子学会青少年软件编程机器人技术七级等级考试试卷真题【实际操作】

答案和更多内容请查看网站:【试卷中心 ----->电子学会 ---->机器人技术 ----> 七级】 网站链接 青少年软件编程历年真题模拟题实时更新 青少年机器人技术等级考试实际操作试卷(七级) 2026年3月 一、实操试题 主题&#xff1…...

液冷下半场:两相液冷比拼的不仅是冷板厚度,还比什么?

常见问题(FAQ) Q: 两相液冷能将芯片温差控制在多少? A: 可在2℃以内,典型工况下可达1.5℃。相比单相液冷的8℃以上波动,优势明显。 Q: 存量机房改造后,机柜功率能提升多少? A: 某数据中心改造…...

DMRG-SCF方法:量子化学强关联系统的高效计算方案

1. DMRG-SCF方法概述:量子化学中的强关联系统解决方案密度矩阵重整化群自洽场(DMRG-SCF)方法是近年来量子化学领域最具突破性的进展之一,它巧妙结合了两种经典理论的优势。作为一位长期从事量子化学计算的科研人员,我见…...

基于Arduino与DFPlayer Mini打造可编程声音反馈键盘

1. 项目概述:当键盘不只是键盘 如果你和我一样,每天有超过8小时的时间在和键盘打交道,那你一定对“手感”这个词有执念。薄膜键盘的绵软、机械轴的段落感、静电容的柔和,每一种都代表了一种输入体验。但“BryceWG/BiBi-Keyboard”…...

菲仕技术冲刺港股:年营收16亿,亏6189万 先进制造与京津冀基金是股东

雷递网 雷建平 5月14日宁波菲仕技术股份有限公司(简称:“菲仕技术”)日前更新招股书,准备在港交所上市。年营收16亿 亏6189万菲仕技术成立于2001年,是一家电驱动解决方案供应商,提供综合及定制化的电驱动系…...