调整BFS以适应多个目标值

我有一个如下所示的函数程序。BFS函数显示从节点到目标/目标的路径。我如何修改BFS函数,使其不接受单个字符作为目标,而是接受一个字符列表?

# 树存储为字典(父节点: [子节点])
simpletree = {'a':  ['b', 'c'],
              'b':  ['d','e', 'f'],
              'c':  ['g', 'h', 'i','j'],
              'd':  ['k', 'l'],
              'e':  ['m'],
              'g':  ['n'],
              'i':  ['o'],
              'j':  ['p'],
              'o':  ['z']}

def Successors(node,dictionarytree):
    children=dictionarytree[node]#提取节点的子节点
    for child in children:#通过for循环获取子节点并yield
             yield child

# 字典树的广度优先搜索
def BFS(nodelist,target,dictionarytree):
    print "Nodelist:",nodelist
    childlist=[]
    # 遍历父节点列表中的所有节点
    for parent in nodelist:
        # 如果节点是目标
        if parent[-1]==target:
            return parent
        # 检查节点是否有子节点
            if dictionarytree.has_key(parent[-1]):#检查字典中是否存在该键
            # 遍历子节点并返回子节点
             for child in Successors(parent[-1],dictionarytree):
                     print child
                    childpath=parent+(child,)#将目标添加到子路径
                    childlist.append(childpath)
                    print "childpath",childpath
    # 如果有子节点,继续到树的下一层
    if len(childlist) != 0:
        return BFS(childlist,target,dictionarytree)
    else:
        return None

node='a'
goal='z'
print simpletree
print BFS([(node,)],goal,simpletree)

回答:

嗯,BFS并不是真正设计用来处理多个目标结尾的。你在修改后也不能真正称之为BFS。如果你真的对这个感兴趣,你可以把它画出来,然后在脑海中按照算法进行模拟。但你需要跟踪哪个路径对应哪个目标。我认为这不会有太大帮助。

就我个人而言,既然这看起来是为学校准备的,我会建议在另一个函数中遍历字符列表并存储值。不过,你需要编辑你的BFS函数,使其返回路径而不是打印路径。

def multipleBFSRuns(listOfChars):
  values=[]
  for x in listOfChars:
     values.append(BFS([(node,)],x,simpletree))
  return values

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注