图的深度优先遍历简单例子
时间: 2023-10-30 16:05:04 浏览: 49
假设我们有以下这张图:
```
1 -- 2 -- 3
| | |
4 -- 5 -- 6
```
其中每个数字表示图中的一个节点,每个节点与相邻的节点用一条边相连。
深度优先遍历的基本思想是从某个节点开始,尽可能深地访问每个节点,直到所有可达节点都被访问过为止。具体实现可以使用递归或者栈。
一种深度优先遍历的顺序是按照节点的编号从小到大进行,我们可以按照这种方式进行深度优先遍历,得到以下遍历顺序:
```
1 -> 2 -> 3 -> 5 -> 6 -> 4
```
具体实现可以参考以下 Python 代码:
```python
# 定义图的数据结构
graph = {
1: [2, 4],
2: [1, 3, 5],
3: [2, 6],
4: [1, 5],
5: [2, 4, 6],
6: [3, 5]
}
# 定义深度优先遍历函数
def dfs(graph, node, visited):
visited.append(node)
for neighbor in graph[node]:
if neighbor not in visited:
dfs(graph, neighbor, visited)
# 调用深度优先遍历函数
visited = []
dfs(graph, 1, visited)
print(visited)
```
输出结果为:`[1, 2, 3, 5, 6, 4]`。
相关问题
邻接表深度优先遍历和广度优先遍历的例子
假设我们有以下无向图的邻接表表示:
```
0 -> 1 -> 2
1 -> 0 -> 2 -> 3
2 -> 0 -> 1 -> 4
3 -> 1 -> 4
4 -> 2 -> 3
```
那么,深度优先遍历和广度优先遍历的结果如下:
深度优先遍历:
```
0 -> 1 -> 2 -> 4 -> 3
```
广度优先遍历:
```
0 -> 1 -> 2 -> 3 -> 4
```
深度优先遍历的方法是从起始节点开始,先访问与该节点相邻的第一个未被访问的节点,然后再递归访问该节点的相邻节点,直到所有的节点都被访问过为止。在上述例子中,深度优先遍历先访问了节点0,然后访问节点1,再访问节点2,再递归访问节点4和节点3。
广度优先遍历的方法是从起始节点开始,先访问与该节点相邻的所有未被访问的节点,然后再依次访问这些节点的相邻节点,直到所有的节点都被访问过为止。在上述例子中,广度优先遍历先访问了节点0,然后访问节点1和节点2,再依次访问节点3和节点4。
python深度优先遍历图
对于深度优先遍历图的问题,可以使用递归或者栈来实现。下面是一个使用递归实现深度优先遍历的示例代码:
```python
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start, end=' ')
for neighbor in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited)
```
这里假设图以字典的形式表示,其中键表示节点,值表示与该节点相邻的节点列表。通过调用`dfs(graph, start)`,即可从起始节点开始进行深度优先遍历。
如果你具体有一个图的例子,我可以给你更详细的代码解释。