深度搜索(DFS)算法python基础题

题目:

        给定一个整数 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)

你可能感兴趣的:(python,深度优先)