数据结构实验报告
图的遍历
一、实验目的
本实验旨在通过实践的方式学习图的遍历算法,掌握图的深度优先搜索(DFS)和广度优先搜索(BFS)的实现方法,加深对数据结构中图的理解。
二、实验步骤
1. 创建图的数据结构
首先,我们需要创建一个图的数据结构,以方便后续的操作。
图可以使用邻接
矩阵或邻接表来表示,这里我们选择使用邻接矩阵。
class Graph:
def__init__(self, num_vertices):
self.num_vertices = num_vertices
self.adj_matrix = [[0] * num_vertices for _ in range(num_vertic es)]
def add_edge(self, v1, v2):
self.adj_matrix[v1][v2] =1
self.adj_matrix[v2][v1] =1
def get_adjacent_vertices(self, v):
adjacent_vertices = []
for i in range(self.num_vertices):
if self.adj_matrix[v][i] ==1:
adjacent_vertices.append(i)
return adjacent_vertices
2. 深度优先搜索(DFS)
DFS是一种遍历图的算法,其基本思想是从图的某一顶点开始,沿着一条路径
一直走到最后,然后返回尚未访问过的顶点继续遍历,直到所有顶点都被访问过为止。
def dfs(graph, start_vertex):
visited = [False] * graph.num_vertices
stack = [start_vertex]
while stack:
vertex = stack.pop()
if not visited[vertex]:
print(vertex)
visited[vertex] =True
for neighbor in graph.get_adjacent_vertices(vertex):
if not visited[neighbor]:
stack.append(neighbor)
3. 广度优先搜索(BFS)
BFS同样是一种遍历图的算法,其基本思想是从图的某一顶点开始,首先访问其所有邻接点,然后再依次访问邻接点的邻接点,直到所有顶点都被访问过为止。
from collections import deque
def bfs(graph, start_vertex):
visited = [False] * graph.num_vertices
queue = deque([start_vertex])
while queue:
vertex = queue.popleft()
if not visited[vertex]:
print(vertex)
visited[vertex] =True
for neighbor in graph.get_adjacent_vertices(vertex):
if not visited[neighbor]:
queue.append(neighbor)
三、实验结果
假设我们有以下图:
0 -- 1 -- 2
| |
3 --
4 -- 5
使用上述实现的DFS和BFS算法,从顶点0开始遍历,得到的结果分别为:DFS遍历结果:0 -> 1 -> 2 -> 5 -> 4 -> 3
BFS遍历结果:0 -> 1 -> 3 -> 4 -> 2 -> 5
四、实验总结
本实验通过图的遍历算法的实现,加深了对图和图遍历算法的理解。
DFS和BFS是两种基本的图遍历算法,它们在不同应用场景下有不同的优劣势,可以根据具体需求选择合适的算法。
在实际应用中,图的遍历算法被广泛应用于各种问题的解决,比如迷宫寻路、社交网络分析等。
通过灵活运用这些算法,可以高效地解决许多实际问题。
通过本次实验,我进一步熟悉了图的遍历算法的实现步骤,对数据结构图的应用有了更深入的认识。
在以后的学习和工作中,我会继续深入研究和应用图的相关知识,提升自己的算法设计和问题解决能力。