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)