题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
# 初始化一个空列表,用于存储所有可能的出站顺序 res = [] # 定义深度优先搜索函数 # wait: 等待进站的火车列表 # stack: 当前在站内的火车栈(后进先出) # out: 已经出站的火车列表 def dfs(wait, stack, out): # 当等待进站和站内火车都为空时,表示所有火车都已出站 # 此时,将出站顺序添加到结果列表中 if not wait and not stack: res.append(' '.join(map(str, out))) # 如果还有火车等待进站 # 则选择一辆火车进站(入栈),并继续搜索 if wait: dfs(wait[1:], stack + [wait[0]], out) # 如果站内还有火车(栈不为空) # 则可以选择一辆火车出站(出栈),并继续搜索 if stack: dfs(wait, stack[:-1], out + [stack[-1]]) # 无限循环,直到捕获到异常(例如输入结束) while True: try: # 读取火车总数和进站编号列表 n, nums = int(input()), list(map(int, input().split())) # 调用深度优先搜索函数,从初始状态开始搜索所有可能的出站顺序 dfs(nums, [], []) # 对所有可能的出站顺序进行排序,并输出 for i in sorted(res): print(i) # 清空结果列表,为下一组输入做准备(如果有的话) res.clear() except: # 捕获异常,跳出循环(通常是因为输入结束) break