希赛考试网
首页 > 软考 > 软件设计师

图的遍历代码实现

希赛网 2024-02-06 12:33:31

图是一种数据结构,它由顶点和边组成。图的遍历是指按照一定的规则,访问图中的所有节点,而不重复。图的遍历分为深度优先遍历和广度优先遍历,它们都有不同的实现方法。

深度优先遍历(DFS)

深度优先遍历是一种递归算法,它沿着图的深度遍历图的节点。从一个节点开始,如果它有未被访问的相邻节点,就选择一个未被访问的节点进行递归访问。如果所有相邻节点都被访问过,就回溯到上一个节点继续遍历。

深度优先遍历的实现方法有两种:递归和栈。

递归实现深度优先遍历的代码如下:

```python

visited = set() # 已访问节点集合

def dfs(graph, vertex):

visited.add(vertex)

for neighbor in graph[vertex]:

if neighbor not in visited:

dfs(graph, neighbor)

```

栈实现深度优先遍历的代码如下:

```python

visited = set()

def dfs(graph, start):

stack = [start] # 堆栈初始化,将初始节点入栈

while stack:

vertex = stack.pop() # 出栈

if vertex not in visited:

visited.add(vertex)

stack.extend(graph[vertex] - visited) # 将未访问过的相邻节点入栈

```

广度优先遍历(BFS)

广度优先遍历是从起始节点开始,按照广度优先的顺序访问节点。首先访问起始节点,接着访问和起始节点相邻的所有节点,然后访问这些节点的相邻节点,直到所有节点都被访问。

广度优先遍历的实现方法是使用队列。

广度优先遍历的代码实现如下:

```python

visited = set()

def bfs(graph, start):

queue = [start] # 队列初始化,将初始节点入队

while queue:

vertex = queue.pop(0) # 出队

if vertex not in visited:

visited.add(vertex)

queue.extend(graph[vertex] - visited) # 将未访问过的相邻节点入队

```

微信扫一扫,领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考报考咨询

微信扫一扫,定制学习计划