python解无向加权图遍历
时间: 2023-10-12 21:04:51 浏览: 111
要解决无向加权图的遍历问题,你可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法。这两种算法都可以用来遍历图,并找到图中特定节点之间的路径。
下面是一个使用深度优先搜索算法来遍历无向加权图的示例:
```python
from collections import defaultdict
def dfs(graph, start, visited):
visited.add(start)
print(start, end=" ")
for neighbor, weight in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited)
# 创建一个无向加权图的示例
graph = defaultdict(list)
graph[1] = [(2, 1), (3, 2)]
graph[2] = [(1, 1), (4, 3)]
graph[3] = [(1, 2), (4, 4)]
graph[4] = [(2, 3), (3, 4)]
# 初始化访问集合
visited = set()
# 从节点1开始进行深度优先搜索
dfs(graph, 1, visited)
```
运行上述代码会输出以下结果:
```
1 2 4 3
```
这表示从节点1开始,深度优先搜索算法按照路径1-2-4-3遍历了整个图。
如果你想使用广度优先搜索算法来遍历无向加权图,可以使用队列数据结构来实现。以下是一个示例:
```python
from collections import defaultdict, deque
def bfs(graph, start):
visited = set()
queue = deque([start])
while queue:
node = queue.popleft()
if node not in visited:
print(node, end=" ")
visited.add(node)
for neighbor, weight in graph[node]:
if neighbor not in visited:
queue.append(neighbor)
# 创建一个无向加权图的示例
graph = defaultdict(list)
graph[1] = [(2, 1), (3, 2)]
graph[2] = [(1, 1), (4, 3)]
graph[3] = [(1, 2), (4, 4)]
graph[4] = [(2, 3), (3, 4)]
# 从节点1开始进行广度优先搜索
bfs(graph, 1)
```
运行上述代码会输出以下结果:
```
1 2 3 4
```
这表示从节点1开始,广度优先搜索算法按照路径1-2-3-4遍历了整个图。
希望这个示例能帮助你解决无向加权图的遍历问题!如有其他问题,请随时提问。
阅读全文