图的深度遍历python
时间: 2023-01-17 07:20:55 浏览: 301
在图的深度优先遍历中,我们从图的某个节点开始,沿着节点的边走到尽可能深的位置,然后再回溯并访问其他的节点。我们可以使用栈来帮助我们实现深度优先遍历。
下面是一个 Python 代码示例,实现了深度优先遍历的基本流程:
```
def dfs(graph, start):
visited, stack = set(), [start]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
stack.extend(graph[vertex] - visited)
return visited
```
其中,`graph` 是一个字典,表示图中节点之间的边。`start` 是遍历的起始节点。
算法的基本流程是:
1. 将起始节点加入栈中。
2. 取出栈顶节点,如果它没有被访问过,就将它标记为已访问。
3. 将该节点的所有相邻节点加入栈中,但要排除已经访问过的节点。
4. 重复步骤 2 和 3,直到栈为空。
该算法最后会返回所有访问过的节点的列表。
相关问题
图的深度优先遍历python
以下是Python中图的深度优先遍历的实现方法:
```python
# 定义一个图类
class Graph:
def __init__(self, graph_dict=None):
if graph_dict is None:
graph_dict = {}
self.__graph_dict = graph_dict
# 添加节点
def add_node(self, node):
if node not in self.__graph_dict:
self.__graph_dict[node] = []
# 添加边
def add_edge(self, edge):
edge = set(edge)
(node1, node2) = tuple(edge)
if node1 in self.__graph_dict:
self.__graph_dict[node1].append(node2)
else:
self.__graph_dict[node1] = [node2]
# 深度优先遍历
def dfs(self, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start)
for next_node in self.__graph_dict[start]:
if next_node not in visited:
self.dfs(next_node, visited)
# 创建一个图实例
graph = Graph()
# 添加节点
graph.add_node('A')
graph.add_node('B')
graph.add_node('C')
graph.add_node('D')
graph.add_node('E')
# 添加边
graph.add_edge(('A', 'B'))
graph.add_edge(('B', 'C'))
graph.add_edge(('C', 'D'))
graph.add_edge(('D', 'E'))
graph.add_edge(('E', 'A'))
# 深度优先遍历
graph.dfs('A')
```
输出结果为:
```
A
B
C
D
E
```
有向图的深度优先遍历python
有向图的深度优先遍历(Depth First Search, DFS)是一种用于遍历图的算法。它从图中的一个顶点开始,沿着一条路径尽可能深地访问图中的顶点,直到无法继续前进为止,然后回溯到前一个顶点,继续探索其他路径。以下是一个用Python实现有向图深度优先遍历的示例代码:
```python
# 定义有向图类
class DirectedGraph:
def __init__(self):
self.graph = {}
# 添加边
def add_edge(self, start, end):
if start in self.graph:
self.graph[start].append(end)
else:
self.graph[start] = [end]
# 深度优先遍历
def dfs(self, start):
visited = set() # 记录已访问的节点
def dfs_helper(node):
visited.add(node)
print(node, end=" ") # 输出节点值
if node in self.graph:
for neighbor in self.graph[node]:
if neighbor not in visited:
dfs_helper(neighbor)
dfs_helper(start)
# 创建有向图对象
graph = DirectedGraph()
# 添加边
graph.add_edge('A', 'B')
graph.add_edge('A', 'C')
graph.add_edge('B', 'D')
graph.add_edge('B', 'E')
graph.add_edge('C', 'F')
# 深度优先遍历
print("深度优先遍历结果:")
graph.dfs('A')
```
运行以上代码,输出结果为:A B D E C F
阅读全文