利用邻接矩阵创建无向图实现DFS和BFS
时间: 2024-01-10 21:46:47 浏览: 86
邻接矩阵无向图
好的,下面是利用邻接矩阵创建无向图实现DFS和BFS的 Python 代码:
```python
class Graph:
def __init__(self, vertices):
self.V = vertices
self.adj_matrix = [[0] * self.V for _ in range(self.V)]
def add_edge(self, u, v):
self.adj_matrix[u][v] = 1
self.adj_matrix[v][u] = 1
def DFSUtil(self, v, visited):
visited[v] = True
print(v, end=' ')
for i in range(self.V):
if self.adj_matrix[v][i] == 1 and not visited[i]:
self.DFSUtil(i, visited)
def DFS(self, start):
visited = [False] * self.V
self.DFSUtil(start, visited)
print()
def BFS(self, start):
visited = [False] * self.V
queue = [start]
visited[start] = True
while queue:
s = queue.pop(0)
print(s, end=' ')
for i in range(self.V):
if self.adj_matrix[s][i] == 1 and not visited[i]:
queue.append(i)
visited[i] = True
print()
```
其中,`Graph` 类表示一个图,`__init__` 方法初始化图的顶点数 `V` 和邻接矩阵 `adj_matrix`。`add_edge` 方法用来添加边。`DFSUtil` 方法表示 DFS 的递归实现。`DFS` 方法表示 DFS 的非递归实现。`BFS` 方法表示 BFS 的实现。其中,`visited` 数组用来记录顶点是否被访问过,`queue` 则用来实现 BFS 的队列。
你可以按照下面的步骤来测试代码:
```python
g = Graph(4)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 3)
print("DFS:")
g.DFS(0)
print("BFS:")
g.BFS(0)
```
输出结果为:
```
DFS:
0 1 2 3
BFS:
0 1 2 3
```
阅读全文