我有一个用于在图形上执行广度优先搜索的代码,我试图调用BFS过程(例如:BFS(graph,“ A”,“ C”),但是它向我显示了一个错误。我需要定义MyQUEUE,如何以及在何处定义它?
我尝试制作一个类队列并定义它,但是它一直向我显示错误
def BFS(graph,start,end):
q = MyQUEUE() # make an empty queue first
q.enqueue([start]) # add the start node onto the queue
while q.IsEmpty() == False:
path = q.dequeue()
last_node = path[len(path)-1]
print (path)
if last_node == end:
print ("VALID_PATH : ", path)
for link_node in graph[last_node]:
if link_node not in path:
new_path = []
new_path = path + [link_node]
q.enqueue(new_path)
graph = {'A': ['B', 'C','E'],
'B': ['A','C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F','D'],
'F': ['C']}
我希望在shell(BFS(图形,node1,node2))中调用BFS使其正常工作,以便找到所有可用的路径。
答案 0 :(得分:0)
Python在其collections
模块中提供了一个队列数据结构(它被称为deque
,这有些令人困惑)。根据您的情况,您可以将append()
用于enqueue
,将popleft()
用于dequeue
(或appendleft()
和pop()
)。
也就是说,如果我要根据您的简单规范实现一个简单的FIFO MyQUEUE
类,仅使用一个简单的列表,它将看起来像这样:
class MyQUEUE:
def __init__(self):
self.queue = [] # start with an empty list
def enqueue(self, elem):
self.queue.append(elem) # add element to back of list
def dequeue(self):
return self.queue.pop(0) # remove element from front of list