2019-3-全排列

2019-12-17-全排列
1: 递归实现
2: DFS

"""
全排列: 递归实现
思想:
确定第1位,对n-1位进行全排列,确定第二位,对n-2位进行全排列
"""
count=0                             #计数
def permutations1(arr,left,right):
    if left==right:                     #递归结束条件
        print(arr)                      #当结束一次,打印一次结果
        global count
        count=count+1
    else :
        for i in range(left,right):
            arr[i],arr[left] =arr[left],arr[i]  #交换相邻两个数
            permutations1(arr,left+1,right)     #对n-1位进行全排列

arr = [1,2]
permutations1(arr, 0, len(arr))
print("总共有:",count)


"""
2: 深度搜索
思想: 深度优先 DFS

"""
visit=[False for x in range(0,100)]  #标记数组 ,初始化为False ,表示没有走过,空间为100
temp=['' for x in range(0,100)]      #临时存储数组,开100,每位赋值为空''
count=0                              #计数
def Print(arr):                      #打印函数
    for i in arr:
        if i!='':
            print(i,end='')         #end='' 不换行
    print()
def DFS(index):                     #深度搜索
    if index ==len(arr):            #结束条件
        Print(temp)
        global count                #global 全局变量
        count=count +1
        return
    for i in range(0,len(arr)):
        if visit[i]==False:
            temp[index]=arr[i]
            visit[i]=True          #标记
            DFS(index+1)           #深搜
            visit[i]=False         #回退
arr=[1,2,3]                     #测试数组
DFS(0)
print("总共有:",count)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值