无向图的邻接矩阵存储深度和广度优先遍历,要用到队列,输入无向图G的顶点数,顶点的值,每条边的两个端点,输出构造的顶点表和构造的邻接矩阵以及深度广度优先遍历,数据结构代码
时间: 2025-02-23 16:32:48 浏览: 54
在无向图的邻接矩阵表示中,我们通常会创建一个二维数组,其中行和列表示图中的每个节点,元素值为0或1,0表示没有连接,1表示有连接。对于深度优先搜索(DFS),它是一种递归的遍历策略,可以使用栈来辅助,从起点开始,访问当前节点的所有未访问邻居,直到无法再前进为止,然后回溯。
而对于广度优先搜索(BFS),这是一种层次遍历策略,需要借助队列来保持节点按顺序访问。首先将起始节点放入队列,然后每次取出队首节点并访问其所有相邻节点,将其加入队列,直至队列为空。
下面是基于Python的基本实现:
```python
# 假设我们有一个名为Graph的类,包含邻接矩阵和顶点列表
class Graph:
def __init__(self, vertices):
self.V = vertices
# 初始化邻接矩阵
self.adj_matrix = [[0] * vertices for _ in range(vertices)]
def add_edge(self, u, v):
self.adj_matrix[u][v] = 1
self.adj_matrix[v][u] = 1
# DFS实现
def dfs_util(self, v, visited):
visited[v] = True
print(v, end=' ')
for i in range(self.V):
if self.adj_matrix[v][i] and not visited[i]:
self.dfs_util(i, visited)
def dfs(self, start):
visited = [False] * self.V
self.dfs_util(start, visited)
# BFS实现
def bfs_util(self, v, visited, queue):
visited[v] = True
print(v, end=' ')
queue.append(v)
while queue:
vertex = queue.pop(0) # 队头出队
for i in range(self.V):
if self.adj_matrix[vertex][i] and not visited[i]:
visited[i] = True
print(i, end=' ')
queue.append(i)
def bfs(self, start):
visited = [False] * self.V
queue = [start]
self.bfs_util(start, visited, queue)
# 示例使用
g = Graph(5) # 假设有5个节点
g.add_edge(0, 1)
g.add_edge(0, 4)
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 3)
print("邻接矩阵:")
for row in g.adj_matrix:
print(row)
g.dfs(0) # 输出深度优先遍历结果
print("\n从0开始的深度优先遍历:")
g.bfs(0) # 输出广度优先遍历结果
```
阅读全文
相关推荐


















