给定一个graph用python如何遍历
时间: 2024-05-16 13:17:53 浏览: 59
Python算法之图的遍历
要遍历一个图,你可以使用广度优先搜索(BFS)或深度优先搜索(DFS)算法。下面是一个简单的Python示例,演示如何使用DFS遍历一个无向图:
```python
graph = {
'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])
}
def dfs(graph, node, visited):
if node not in visited:
visited.add(node)
print(node)
for neighbor in graph[node]:
dfs(graph, neighbor, visited)
visited = set()
dfs(graph, 'A', visited)
```
在这个示例中,我们定义了一个无向图,并使用字典来表示图的邻接表。然后,我们定义了一个DFS函数,该函数采用图、当前节点和一个已访问节点的集合作为参数。首先,我们将当前节点添加到已访问节点的集合中,并打印该节点。然后,我们递归地遍历所有邻居节点,直到没有未访问的节点为止。最后,我们初始化一个空集合,并从节点'A'开始调用DFS函数。
你也可以使用BFS算法遍历图。下面是一个类似的示例,演示了如何使用BFS遍历同样的无向图:
```python
graph = {
'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])
}
def bfs(graph, start):
visited, queue = set(), [start]
while queue:
node = queue.pop(0)
if node not in visited:
visited.add(node)
print(node)
queue.extend(graph[node] - visited)
bfs(graph, 'A')
```
在这个示例中,我们定义了一个BFS函数,该函数采用图和一个起始节点作为参数。我们使用一个队列来存储要访问的节点,并初始化一个空集合来存储已访问的节点。我们从起始节点开始,将其添加到队列中并标记为已访问。然后,我们循环遍历队列,将队列中的第一个节点弹出并打印。最后,我们将该节点的所有邻居添加到队列中,除去已访问节点。
阅读全文