BFS,试图找到节点之间最长的路

时间:2016-08-18 12:19:36

标签: python breadth-first-search

目前我正在使用一个赋值(BFS),我应该找到两个节点之间最长的路径。请注意,我正在使用队列类和节点类,在我的赋值中,节点类被称为Word。单词是3个字母的单词,我目前有一个方法(longestway)返回从给定单词到最小孩子的最长路径。

问题是,我想实现它,以便它返回从列表中的任何单词到其最小子项的最长路径,然后返回所有这些路径中最长的路径。

我现在的代码正在运行,但它耗时太长时间,我需要帮助才能加快这个速度。

我的代码目前看起来像这样:

def printpath1(start):
    ordet=longestway(setlista(),start)
    path=[]
    p=ordet
    while p is not None:
        path.append(p.ordet)
        p=p.parents
    path.reverse()
    #print (path)
    return len(path)


def ordpar(lista):
    s=lista
    a=[]
    for elem in s:
        if a[0]<printpath1(elem):
            a.pop(0)
            a.append(printpath1(elem))
    print(a)

printpath1目前工作正常,但ordpar运行时间过长,我需要帮助来加快速度。

1 个答案:

答案 0 :(得分:0)

一个好的开始是停止从列表的头部删除元素,因为你所做的就是打印,并引入一个偏移量变量。此外,您使用相同的参数调用printpath1两次,这是必要计算的两倍。

offset = 0
for elem in lista:
    pp1 = printpath1(elem)
    if a[offset] < pp1:
        a.append(pp1)
        offset += 1
print(a[offset::])