def dfs(root, i, j, results, path, block):
if len(root[i])==0:
results.append(path.copy())
return
if j == len(root[i]):
return
if len(root[i]) > 0 and root[i][j] not in block:
path.append(root[i][j])
dfs(root, root[i][j], 0, results, path, block)
path.pop()
dfs(root, i, j + 1, results, path, block)
return results
if __name__ == '__main__':
n = int(input("输入: ")) # "请输入节点数 "
assert n>0, "节点数必须大于0, 不然没意义"
if n==1:
print("输出: 0")
exit(0)
edges = int(input("")) # "请输入边数 "
root = [[] for _ in range(n)]
edge = [[] for _ in range(edges)]
for i in range(edges):
father, children = map(int, input().split()) # "请输入第{}条边的父节点和子节点 ".format(i+1)
edge[i].append(father)
edge[i].append(children)
root[father].append(children)
blocks = int(input()) # "请输入障碍物数 "
block = []
for i in range(blocks):
index = int(input()) # "请输入第{}个障碍物节点 ".format(i+1)
block.append(index)
for i in range(n):
root[i].sort()
results = dfs(root, 0, 0, [], [0], block)
if len(results)==0:
print("输出: NULL")
else:
minLen = results[0]
for res in results:
if len(res) < len(minLen):
minLen = res
result = "{}".format(minLen[0])
for i in range(1, len(minLen)):
result += "->{}".format(minLen[i])
print("输出: {}".format(result))
exit(0)
华为2023: 2.树上逃离
于 2023-04-20 02:04:23 首次发布