这是topological sorting的案例。
例如,您可以使用深度优先遍历来执行此排序:
def topsort(relation):
# Create node list
nodes = {node: [] for pair in relation for node in pair}
# Create edges in reversed direction, as adjacency list
for older, younger in relation:
nodes[younger].append(older)
result = []
def visit(node):
olders = nodes[node]
if olders == 2: # Already visited
return
if olders == 1: # Is on the current path
raise ValueError("cycle detected")
nodes[node] = 1
for older in olders:
visit(older)
nodes[node] = 2
result.append(node)
# Start depth first traversal
for node in nodes:
visit(node)
return result
relation = [(0,6),(1,2),(1,4),(1,6),(3,0),(3,4),(5,1),(7,0),(7,1)]
print(topsort(relation)) # [3, 7, 0, 5, 1, 6, 2, 4]
请注意,可能有多种解决方案。例如,对于这个示例输入,不知道第 5 个人是否比第 7 个人大,因此您可以对它们进行排序。