图的广度优先搜索的python代码
时间: 2024-03-02 09:42:55 浏览: 13
当然,我可以为您提供图的广度优先搜索的Python代码。以下是示例代码:
```
from queue import Queue
def bfs(graph, start):
visited = set()
queue = Queue()
visited.add(start)
queue.put(start)
while not queue.empty():
vertex = queue.get()
print(vertex)
for neighbor in graph[vertex]:
if neighbor not in visited:
visited.add(neighbor)
queue.put(neighbor)
# 以下是示例图
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
bfs(graph, 'A')
```
希望这可以帮助您解决您的问题!
相关问题
n皇后问题的广度优先搜索python代码
以下是 n 皇后问题的广度优先搜索 Python 代码:
```python
from queue import Queue
def is_valid(board, row, col):
# 检查列是否有冲突
for i in range(row):
if board[i] == col:
return False
# 检查左上角是否有冲突
i, j = row - 1, col - 1
while i >= 0 and j >= 0:
if board[i] == j:
return False
i, j = i - 1, j - 1
# 检查右上角是否有冲突
i, j = row - 1, col + 1
while i >= 0 and j < len(board):
if board[i] == j:
return False
i, j = i - 1, j + 1
return True
def solve_n_queens(n):
q = Queue()
q.put([])
solutions = []
while not q.empty():
board = q.get()
row = len(board)
if row == n:
solutions.append(board)
else:
for col in range(n):
if is_valid(board, row, col):
q.put(board + [col])
return solutions
# 测试
solutions = solve_n_queens(4)
print(solutions) # [[1, 3, 0, 2], [2, 0, 3, 1]]
```
该代码使用队列实现广度优先搜索,依次枚举每一行中皇后的位置,如果该位置合法,则将该位置加入队列中,并继续搜索下一行。当搜索到最后一行时,将该解加入解集中。最终返回所有解集。
广度优先深度优先python 代码实现
好的,下面是Python实现广度优先搜索和深度优先搜索的示例代码:
广度优先搜索:
```python
from collections import deque
def bfs(graph, start, end):
queue = deque()
queue.append(start)
visited = set()
while queue:
node = queue.popleft()
if node == end:
return True
visited.add(node)
for neighbor in graph[node]:
if neighbor not in visited:
queue.append(neighbor)
return False
```
深度优先搜索:
```python
def dfs(graph, start, end, visited=None):
if visited is None:
visited = set()
visited.add(start)
if start == end:
return True
for neighbor in graph[start]:
if neighbor not in visited:
if dfs(graph, neighbor, end, visited):
return True
return False
```
这里的`graph`是一个字典,表示图的邻接表,`start`是起点,`end`是终点。广度优先搜索使用了双端队列`deque`,深度优先搜索使用了递归。