Python 我是否可以显示算法在查找元素时遵循的路径
我是python新手,我正在尝试为一个简单的图编写广度优先搜索代码。我想展示算法如何遍历节点以找到目标节点。i、 例如,到达目标节点的路径。我有最短路径的代码,但我需要帮助为我的作业编写基本宽度优先搜索代码。请原谅任何错误。任何关于python的提示和技巧都会有很大的帮助。谢谢Python 我是否可以显示算法在查找元素时遵循的路径,python,breadth-first-search,Python,Breadth First Search,我是python新手,我正在尝试为一个简单的图编写广度优先搜索代码。我想展示算法如何遍历节点以找到目标节点。i、 例如,到达目标节点的路径。我有最短路径的代码,但我需要帮助为我的作业编写基本宽度优先搜索代码。请原谅任何错误。任何关于python的提示和技巧都会有很大的帮助。谢谢 graph = {'A': ['B', 'C'], 'B': ['D', 'E'], 'C': ['F', 'G'], 'D': ['B'], 'E
graph = {'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F', 'G'],
'D': ['B'],
'E': ['B'],
'F': ['C'],
'G': ['C']}
此示例的预期输出应该是['A'、'B']、['A'、'C']、['A'、'C'、'F']
我得到的输出是['A'、'B']、['A'、'C']
我不完全确定您的代码是什么,但对于广度优先搜索,我会这样做:
def bfs(当前节点,已浏览列表):
...
#逻辑
...
explored\u list.append(下一个\u节点)
bfs(下一个搜索节点,搜索搜索列表)
已浏览列表=[]
explored\u list.append(启动\u节点)
bfs(开始节点,探索列表)
如果您的逻辑是这样工作的,您显然可以使用不同的参数,但这是我将使用的一般结构。我认为您对返回和打印感到困惑。 请注意,数组是可变的,这意味着更改相关数组将影响其值。如果要使它们不可变,则需要在将array.copy()赋值/追加到另一个变量时将其放入 代码返回['A','C','F'] 然而,它正在打印['A'、'B']、['A'、'C'] 如果希望返回值是
['A','B'],['A','C'],['A','C','F']
,则需要记录上一个循环中的节点。这里有一个可能的解决方案
def BFS(graph, start, end):
nodes = [[start]]
explored = []
previous_nodes=[]
count = 0
while nodes:
count += 1
print (count)
print(f'explored is {explored}')
print(f'nodes are {nodes}')
path = nodes.pop(0)
current = path[-1]
if current not in explored:
neighbours = graph[current]
for neighbour in neighbours:
new = list(path)
new.append(neighbour)
nodes.append(new)
if neighbour == end:
return [previous_nodes,new]
explored.append(nodes)
previous_nodes.append(nodes.copy()[0])
print(explored)
return "Couldn't Find"
print('return is ',BFS(graph,'A','F'))
请注意,有许多具有数据结构的库可以使您的工作更轻松,例如numpy,pandas明白了!谢谢!!谢谢!!我现在明白了
def BFS(graph, start, end):
nodes = [[start]]
explored = []
previous_nodes=[]
count = 0
while nodes:
count += 1
print (count)
print(f'explored is {explored}')
print(f'nodes are {nodes}')
path = nodes.pop(0)
current = path[-1]
if current not in explored:
neighbours = graph[current]
for neighbour in neighbours:
new = list(path)
new.append(neighbour)
nodes.append(new)
if neighbour == end:
return [previous_nodes,new]
explored.append(nodes)
previous_nodes.append(nodes.copy()[0])
print(explored)
return "Couldn't Find"
print('return is ',BFS(graph,'A','F'))