题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
n = int(input()) # 读取输入,表示接下来要输入的列表的长度,但实际上这个长度信息并未在后续逻辑中使用 name = list(map(int, input().split())) # 读取一行输入,将其分割为多个部分,并将每个部分转换为整数,最后将这些整数存储在一个列表中 # 定义一个递归函数,用于生成所有可能的排列 def func(stack, output, remaining, res): # 如果栈为空且没有剩余元素,说明已经找到了一种排列方式,将其添加到结果列表中 if not stack and not remaining: res.append(output[:]) # 如果栈不为空,取出栈顶元素 if stack: top = stack.pop() # 递归调用函数,将栈顶元素添加到输出列表中,并尝试生成剩余元素的排列 func(stack, output + [top], remaining, res) # 回溯,将栈顶元素重新放回栈中,以便尝试其他排列方式 stack.append(top) # 如果还有剩余元素,将其添加到栈中,并尝试生成剩余元素的排列 if remaining: func(stack + [remaining[0]], output, remaining[1:], res) # 初始化结果列表 res = [] # 调用函数,生成所有可能的排列 func([], [], name, res) # 对结果列表进行排序 res.sort() # 打印所有排列 for i in res: print(*i)