用Python编写一个算法,该算法以prufer代码作为输入并返回树的边集
用Python编写一个算法,该算法以prufer代码作为输入并返回树的边集。 输入:一个名为“p”的列表(prufer代码,零索引) 例如: p=[3,1,0,0,3,2,9,9,2,3] (prufer代码可以在代码块中定义。您不需要编写接受用户输入的函数) 输出:名为“边”的列表(边集_ 例如: 打印(边缘) [3,4]、[1,5]、[0,1]、[0,6]、[3,0]、[2,7]、[9,8]、[9,10]、[2,9]、[3,2]、[3,11]]用Python编写一个算法,该算法以prufer代码作为输入并返回树的边集,python,algorithm,math,Python,Algorithm,Math,用Python编写一个算法,该算法以prufer代码作为输入并返回树的边集。 输入:一个名为“p”的列表(prufer代码,零索引) 例如: p=[3,1,0,0,3,2,9,9,2,3] (prufer代码可以在代码块中定义。您不需要编写接受用户输入的函数) 输出:名为“边”的列表(边集_ 例如: 打印(边缘) [3,4]、[1,5]、[0,1]、[0,6]、[3,0]、[2,7]、[9,8]、[9,10]、[2,9]、[3,2]、[3,11]] 我在这方面遇到了问题。如何获取“p”的值,以便
我在这方面遇到了问题。如何获取“p”的值,以便它在“边”中打印输出?将序列(剩余部分)中的第一个顶点连接到序列(剩余部分)中未出现的最低顶点。删除序列中的第一个顶点,然后重复。连接其余两个顶点
def decode(p):
p = list(p)
vertices = set(range(len(p) + 2))
while p:
v = min(vertices - set(p))
vertices.remove(v)
yield p.pop(0), v
yield min(vertices), max(vertices)
print(list(decode([3, 1, 0, 0, 3, 2, 9, 9, 2, 3])))