描述
火车站一共有 n 辆火车需要入站,每辆火车有一个编号,编号为 1 到 n。
同时,也有火车需要出站,由于火车站进出共享一个轨道,所以后入站的火车需要先出站。换句话说,对于某一辆火车,只有在它之后入站的火车都出站了,它才能出站。
现在,已经知道了火车的入站顺序,你需要计算,一共有多少种不同的出站顺序。按照字典序从小到大依次输出全部的出站顺序。
输入描述:
第一行输入一个整数 n(1≦n≦10) 代表火车的数量。
第二行输入 n个整数 a1,a2,…,an(1≦ai≦n) 代表火车的入站顺序。
输出描述:
输出若干行,每行输出 n 个整数,代表一种出站顺序。你需要按照字典序从小到大依次输出。
结果:
n = int(input())
ai = list(map(int,input().split()))
result = []#存放所有可能的出栈序列
#出栈排列,in_stack:代表已经在站内的车,out_queue:存放出站的车,index:当前处理的车在ai里面的序号
def dfs(in_stack,out_queue,index):
#如果所有的车都已经出站,则将序列加入结果
if len(out_queue)==n:
result.append(tuple(out_queue))
return
#入站
if index<n:
dfs(in_stack+[ai[index]],out_queue,index+1)
#出站
if in_stack:
dfs(in_stack[:-1],out_queue+[in_stack[-1]],index)
#初始化启动函数
dfs([],[],0)
for seq in sorted(result):
print(' '.join(map(str,seq)))