创建无向图的邻接矩阵的深度广度c++
时间: 2024-01-03 11:05:30 浏览: 88
数据结构(visualc++)用邻接矩阵表示给定无向图并进行深度遍历.doc
创建无向图的邻接矩阵的深度优先搜索和广度优先搜索的实现如下:
1. 邻接矩阵的创建
邻接矩阵是一个二维数组,用于表示图中节点之间的连接情况。对于一个无向图,邻接矩阵是一个对称矩阵,因为节点之间的连接是双向的。如果节点i和节点j之间有边相连,则邻接矩阵中第i行第j列和第j行第i列的值均为1,否则为0。
邻接矩阵的创建可以通过以下步骤实现:
1. 定义一个二维数组adj_matrix,大小为n*n,其中n为节点数。
2. 初始化adj_matrix中的所有元素为0。
3. 对于每一条边(i,j),将adj_matrix[i][j]和adj_matrix[j][i]的值都设置为1。
下面是Python代码实现:
```python
def create_adj_matrix(n, edges):
adj_matrix = [[0] * n for _ in range(n)]
for i, j in edges:
adj_matrix[i][j] = adj_matrix[j][i] = 1
return adj_matrix
```
2. 深度优先搜索
深度优先搜索(Depth First Search,DFS)是一种遍历图的算法,它从某个节点出发,沿着一条路径遍历到底,然后回溯到上一个节点,继续遍历下一条路径,直到遍历完整个图。
深度优先搜索可以通过递归实现,具体步骤如下:
1. 定义一个visited数组,用于记录每个节点是否被访问过,初始值均为False。
2. 从某个节点开始遍历,将该节点的visited值设为True。
3. 遍历该节点的所有邻居节点,如果邻居节点未被访问过,则递归访问它。
4. 重复步骤3,直到遍历完所有与该节点相连的节点。
下面是Python代码实现:
```python
def dfs(adj_matrix, start):
visited = [False] * len(adj_matrix)
def search(node):
visited[node] = True
for i in range(len(adj_matrix)):
if adj_matrix[node][i] == 1 and not visited[i]:
search(i)
search(start)
return visited
```
3. 广度优先搜索
广度优先搜索(Breadth First Search,BFS)是一种遍历图的算法,它从某个节点出发,先访问该节点的所有邻居节点,然后再访问邻居节点的所有邻居节点,依此类推,直到遍历完整个图。
广度优先搜索可以通过队列实现,具体步骤如下:
1. 定义一个visited数组,用于记录每个节点是否被访问过,初始值均为False。
2. 定义一个队列queue,将起始节点加入队列。
3. 当队列非空时,取出队列中第一个节点,将其visited值设为True。
4. 遍历该节点的所有邻居节点,如果邻居节点未被访问过,则将其加入队列。
5. 重复步骤3和4,直到队列为空。
下面是Python代码实现:
```python
from collections import deque
def bfs(adj_matrix, start):
visited = [False] * len(adj_matrix)
queue = deque([start])
while queue:
node = queue.popleft()
visited[node] = True
for i in range(len(adj_matrix)):
if adj_matrix[node][i] == 1 and not visited[i]:
queue.append(i)
return visited
```
以上就是创建无向图的邻接矩阵以及深度优先搜索和广度优先搜索的实现。
阅读全文