【蓝桥Python每日一练】————排列组合(DFS枚举)

大家好,我是爱学习的小蓝,欢迎交流指正~ 

 


题目

传送门:94. 递归实现排列型枚举 - AcWing题库

【蓝桥Python每日一练】————排列组合(DFS枚举)_第1张图片

样例输入

3

样例输出

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

题解

难度系数:⭐

考察题型:搜索

涉及知识点:枚举DFS

小蓝的思路:

遇到没见过的题目没思路,不要紧,一开始从简单的代码敲起。

先按照题目的意思输入n,n=int(input())。

然后又看到样例输出里的数据,我就想:这么多数据肯定要找个地方存起来,

就自然创建了一个a数组,并且和下标一一对应,所以范围是(n+1)

题目明示是递归实现,自然创建了DFS函数,模板一套,稍微改几下就成了~


代码

递归排列枚举

n=int(input())#3
a,vis=[0]*(n+1),[0]*(n+1)
def dfs(x):
    if x>n:                      #如果越界
        for i in range(1,n+1):
            print(a[i],end=" ")
        print()
        return
    for i in range(1,n+1):       #循环枚举所有方案
        if vis[i]==0:            #未被标记
            vis[i]=1             #标记
            a[x]=i               #赋值
            dfs(x+1)             #递推
            vis[i]=0             #回溯
dfs(1)
'''
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1 
'''

 题目

传送门:93. 递归实现组合型枚举 - AcWing题库

【蓝桥Python每日一练】————排列组合(DFS枚举)_第2张图片

样例输入

5 3

样例输出

1 2 3 
1 2 4 
1 2 5 
1 3 4 
1 3 5 
1 4 5 
2 3 4 
2 3 5 
2 4 5 
3 4 5 

题解

难度系数:⭐

考察题型:搜索

涉及知识点:DP

小蓝的思路:

老规矩,先输入m,n这两个数。

再创建a数组存放输出的答案。

定义DFS函数开始套模板:

越界条件,打印输出,结束搜索,循环遍历,数组赋值,递推回溯。

这几个步骤如果你的代码都有体现,那么DFS的骨架你就摸清啦~

 递归组合枚举

m,n=map(int,input().split())# 3 2
a=[0]*(n+1)
def dfs(i,start):
    if i>n: #1>2 2>2 3>2     #越界
        for i in range(1,n+1):
            print(a[i],end=" ")
        print()
        return
    for num in range(start,m+1):#遍历
        a[i]=num                #赋值
        dfs(i+1,num+1)          #递推
        a[i]=0                  #回溯
dfs(1,1)
#[0,0,0]
#   1 2
#   1 3     
#   2 3

【蓝桥Python每日一练】————排列组合(DFS枚举)_第3张图片

 读码上万行,下键如有神,撸起袖子加油干!

你可能感兴趣的:(备战蓝桥杯,搜索,python,蓝桥杯,职场和发展,算法,搜索)