n=int(input())
vis=[0]*n
a=[]
def dfs(x,fx,d,list1):
global cnt
if d>n:
return
if x==fx and d!=n:
return
if d==n and x==fx:
cnt+=1
a.append(list1)
return
for i in range(n):
if vis[i]!=1 and x!=i:
vis[x]=1
dfs(i,fx,d+1,list1+[i+1])
vis[x]=0
return
sum=0
if n==1:#特殊情况不能忘
print(1)
else:
for i in range(n):
for j in range(n):
if i!=j:
cnt=0
dfs(i,j,1,[i+1])
sum+=cnt
a.sort()
#print(sum)
#print(a)
for i in range(sum):
print(*a[i])
简化版
n=int(input())
vis=[0]*n
a=[]
def dfs(d,list1):
if d>=n:
print(*list1)
return
for i in range(n):
if vis[i]!=1:
vis[i]=1 #dfs未传入初值,初值在dfs内部第一层for循环输出,故取当前i为标记已走过
dfs(d+1,list1+[i+1])
vis[i]=0
return
dfs(0,[])
n, m = map(int, input().split())
vis = [0] * n
def dfs(d, list1,x):
if d >= m:
print(*list1)
return
for i in range(x,n):
if vis[i]!=1:
vis[i] = 1
dfs(d + 1, list1 + [i + 1],i)
vis[i] = 0
dfs(0,[],0)