题目:
给定一个整数 nn,将数字 1∼n1∼n 排成一排,将会有很多种排列方法。
输入格式
共一行,包含一个整数 nn
输出格式
按字典序输出所有排列方案,每个方案占一行。
输入:
3
输出样例:
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
代码:
n=int(input())
path=[0]*n#此列表用于存放答案
p=[False]*(n+1)#p列表是表示还未遍历的点,现在是将其初始化为False,(n+1)是防止越界,如果为n的话p[n]就会报错。
def dfs(u):
if u==n:#当如果为n的时候说明n个数都枚举完了,所以将其输出。
print(*path)
for i in range(1,n+1):#枚举数,应从1开始
if p[i]==False:#如果该数未被枚举就将存储在path中。
path[u]=i
p[i]=True#因为已经将i存放在path中了,所以已经枚举过了,所以设置为true。
dfs(u+1)#递归下一个数
p[i]=False#当递归后应将原来位置设置为False,便于下一次递归,就是回溯
dfs(0)