全排列模板(二进制压缩)
def dfs(state,ans):
global n,count
if ans==n: #当我们发现我们的坑位已经全部选好了,那么我们就打印出结果
count+=1
for j in martix_array:
print(j,end=' ')
print()
return
for i in range(n): #若坑位没有选完,那么我们具体遍历其他剩余的数据,并将他们插入到其中
if state>>i&1==0: #表示第i个数是否被选择。0则表示没有被选择,1表示被选了
ans+=1 #在这个坑位上选择该数据
martix_array.append(i+1) #将数据加入到坑位中
dfs(state|1<<i,ans) #递归下一个坑位
martix_array.pop() #进行回溯,因为我们每一次的遍历,都是在一棵树上进行遍历答案
ans-=1
n=int(input())
martix_array=[] #用来存储我们遍历的数据
state=ans=count=0 #state用来记录我们每一个数据是否被选择;ans用来表示坑位我们已经选择好了几个;count是我用来记录看数据是否有问题
dfs(state,ans) #dfs遍历每一个坑位可以选择的数据,即遍历数据构成的树,遍历每一个树的子树节点
#print(count)