我在哪里定义队列以及如何在代码中加载BFS?

时间:2019-04-28 06:52:23

标签: python queue breadth-first-search

我有一个用于在图形上执行广度优先搜索的代码,我试图调用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使其正常工作,以便找到所有可用的路径。

1 个答案:

答案 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