算法1:输入图的类型、顶点数、弧(边)数、顶点信息、弧(边)信息,建立相应的图(具体类型可以是无向图、有向图、无向网、有向网,采用邻接矩阵存储结构);分别按深度优先搜索和广度优先搜索遍历图;按某种形式输
时间: 2024-01-01 15:06:09 浏览: 92
出遍历结果。
1. 建立图的过程:
首先,根据输入的图的类型、顶点数和弧(边)数,初始化一个邻接矩阵G,将矩阵中每个元素都初始化为0。然后,将顶点信息按照顺序依次存储到一个一维数组V中。接着,将弧(边)信息按照起始顶点和终止顶点的顺序依次存储到一个二维数组E中,其中E[i][0]表示第i条弧(边)的起始顶点,E[i][1]表示第i条弧(边)的终止顶点,E[i][2]表示该弧(边)的权值(如果是网)。
接下来,根据图的类型,采用不同的方式来进行邻接矩阵的构建。如果是无向图或有向图,则将G[i][j]和G[j][i](如果是无向图)或G[i][j](如果是有向图)分别赋值为1,表示从顶点i到顶点j有一条弧(边)。如果是无向网或有向网,则将G[i][j]或G[j][i](如果是无向网)或G[i][j](如果是有向网)赋值为该弧(边)的权值。
2. 深度优先搜索过程:
深度优先搜索是一种递归的遍历方式。具体实现过程如下:
(1)定义一个数组visited,用于标记每个顶点是否被访问过,初始值全部为false。
(2)从任意一个顶点开始,依次访问它的邻接点。如果该邻接点未被访问,则以该邻接点为起点递归进行深度优先搜索,直到所有与起点相连的顶点都被访问过。
(3)如果存在未被访问的顶点,则从中选择一个顶点作为起点,重复步骤(2)。
(4)如果所有顶点都被访问过,则结束遍历。
具体实现代码如下:
```python
def DFS(G, v, visited):
visited[v] = True
print(v)
for i in range(len(G)):
if G[v][i] != 0 and not visited[i]:
DFS(G, i, visited)
def DFS_traversal(G):
visited = [False] * len(G)
for i in range(len(G)):
if not visited[i]:
DFS(G, i, visited)
```
3. 广度优先搜索过程:
广度优先搜索是一种按层次遍历的方式。具体实现过程如下:
(1)定义一个队列queue,用于存储已经被访问过但其邻接点还未被访问的顶点。
(2)从任意一个顶点开始,将其加入队列queue中,并标记为已访问。
(3)从队列queue中取出一个顶点v,访问它的所有邻接点,并将未被访问过的邻接点加入队列queue中,并标记为已访问。
(4)重复步骤(3),直到队列queue为空。
具体实现代码如下:
```python
from queue import Queue
def BFS(G, v, visited):
queue = Queue()
queue.put(v)
visited[v] = True
while not queue.empty():
v = queue.get()
print(v)
for i in range(len(G)):
if G[v][i] != 0 and not visited[i]:
queue.put(i)
visited[i] = True
def BFS_traversal(G):
visited = [False] * len(G)
for i in range(len(G)):
if not visited[i]:
BFS(G, i, visited)
```
4. 输出遍历结果:
在DFS和BFS的实现代码中,我们分别先输出了每个被访问的顶点的编号,这个可以根据具体需求进行修改,比如输出顶点信息,或者将遍历结果存储到一个列表中等等。
阅读全文