不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感

简介: 【7月更文挑战第11天】在Python编程中,图以邻接表或邻接矩阵表示,前者节省空间,后者利于查询连接。通过字典实现邻接表,二维列表构建邻接矩阵。图的遍历包括深度优先搜索(DFS)和广度优先搜索(BFS)。DFS使用递归,BFS借助队列。这些基础技巧对于解决复杂数据关系问题,如社交网络分析或迷宫求解,至关重要,能提升编程艺术。

在编程的浩瀚宇宙中,图(Graph)作为一种能够表达复杂数据关系的结构,其重要性不言而喻。Python,作为一门灵活且功能强大的编程语言,为我们提供了多种实现和遍历图的方法。今天,我们将一同探索Python中图的精妙表示方式以及高效遍历策略,旨在提升你的编程艺术感。

图的表示
在Python中,图通常可以通过邻接表(Adjacency List)或邻接矩阵(Adjacency Matrix)来表示。邻接表更节省空间,特别是对于稀疏图;而邻接矩阵则便于检查任意两点是否直接相连,但空间复杂度较高。

邻接表表示
python

使用字典实现邻接表

graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F', 'G'],
'F': ['C', 'E'],
'G': ['E']
}

访问节点'A'的邻接节点

print("A的邻接节点:", graph['A'])
邻接矩阵表示
python

使用二维列表(或NumPy数组)实现邻接矩阵

假设图中只有上述7个节点

n = len(graph)
adjmatrix = [[0] * n for in range(n)]

根据邻接表填充邻接矩阵

for node in graph:
for neighbor in graph[node]:
adj_matrix[ord(node) - ord('A')][ord(neighbor) - ord('A')] = 1

打印邻接矩阵(部分)

print("邻接矩阵的部分内容:")
for row in adj_matrix[:3]:
print(row[:3]) # 仅打印前3x3的部分以节省空间
图的遍历
图的遍历主要有深度优先搜索(DFS)和广度优先搜索(BFS)两种策略。

深度优先搜索(DFS)
python
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start, end=' ') # 输出访问顺序
for neighbor in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited)

从节点'A'开始DFS遍历

dfs(graph, 'A')
广度优先搜索(BFS)
python
from collections import deque

def bfs(graph, start):
visited = set()
queue = deque([start])
visited.add(start)

while queue:  
    node = queue.popleft()  
    print(node, end=' ')  # 输出访问顺序  
    for neighbor in graph[node]:  
        if neighbor not in visited:  
            visited.add(neighbor)  
            queue.append(neighbor)  

从节点'A'开始BFS遍历

bfs(graph, 'A')
结语
通过上面的示例,我们不仅学会了如何在Python中使用邻接表和邻接矩阵来表示图,还掌握了DFS和BFS两种高效遍历图的方法。这些基础但强大的技能,将帮助你解决更复杂的图论问题,并在实际编程中展现出更高的艺术感。无论是处理社交网络中的关系链,还是解决迷宫问题,图的精妙表示与高效遍历策略都是你不可或缺的工具。继续深入探索,让编程之路更加宽广而精彩!

相关文章
|
3天前
|
数据采集 数据可视化 索引
【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】
【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】
|
1天前
|
算法 程序员 开发工具
百万级Python讲师又一力作!Python编程轻松进阶,豆瓣评分8.1
在学习Python的旅程中你是否正在“绝望的沙漠”里徘徊? 学完基础教程的你,是否还在为选择什么学习资料犹豫不决,不知从何入手,提高自己?
百万级Python讲师又一力作!Python编程轻松进阶,豆瓣评分8.1
|
2天前
|
Python
python Process 多进程编程
python Process 多进程编程
6 1
|
6天前
|
存储 数据挖掘 程序员
揭秘Python:掌握这些基本语法和数据类型,你将拥有编程世界的钥匙!
【8月更文挑战第8天】Python是一种高级、解释型语言,以简洁的语法和强大的功能广受好评。本文从基本语法入手,强调Python独特的缩进规则,展示清晰的代码结构。接着介绍了Python的主要数据类型,包括数值、字符串、列表、元组、集合和字典,并提供了示例代码。通过这些基础知识的学习,你将为深入探索Python及其在文本处理、数据分析等领域的应用打下坚实的基础。
17 3
|
7天前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
9 3
|
8天前
|
Python
揭秘!Python系统编程里那些让代码自由穿梭的神奇代码行
【8月更文挑战第6天】在Python编程中,一些简洁有力的代码构造让程序更加灵动高效。列表推导式能一行生成列表,如`squares = [x**2 for x in range(10)]`。`with`语句确保资源自动释放,例`with open('example.txt', 'r') as file:`。`lambda`函数便于快速定义小函数,`map(lambda x: x + 1, numbers)`即可完成列表映射。
20 4
|
8天前
|
Python
【Leetcode刷题Python】105. 从前序与中序遍历序列构造二叉树
LeetCode上105号问题"从前序与中序遍历序列构造二叉树"的Python实现,通过递归方法根据前序和中序遍历序列重建二叉树。
11 3
|
8天前
|
API C语言 开发者
Python如何成为跨平台编程的超级巨星:系统调用深度探索
【8月更文挑战第6天】Python凭借简洁的语法和强大的库支持,在编程领域中脱颖而出。其跨平台特性是基于CPython等解释器的设计理念,使得Python程序能在不同操作系统上运行而无需修改代码。Python标准库提供的抽象层隐藏了系统间的差异,加之ctypes等扩展机制,使开发者能高效地编写兼容性强且性能优异的应用。例如,在Windows上利用ctypes调用GetSystemTime系统API获取当前时间,展现了Python深入系统底层的强大能力和灵活性。随着技术演进,Python将继续巩固其作为首选编程语言的地位。
14 3
|
8天前
|
Python
【Leetcode刷题Python】145. 二叉树的后序遍历
LeetCode上145号问题"二叉树的后序遍历"的Python实现方法。
11 2
|
8天前
|
Python
【Leetcode刷题Python】144. 二叉树的前序遍历
LeetCode上144号问题"二叉树的前序遍历"的Python实现方法。
11 1
下一篇
云函数