def backtracking(s,visited,curr,res): if curr satisfied output condition: res.add(curr) return for i in range(len(s)): if s[i] not visited: visited[i] = True curr.add(s[i]) if curr satisfied condition y: backtracking(s,visited,curr,res) visited[i] = False curr.pop()
第二种写法(只返回长度为n的排列):
1 2 3 4 5 6 7 8 9
def backtracking(t): if t==n: output(x) return for i in range(t,n): swap(x[t],x[i]) if constraint(t): backtracking(t+1) swap[x[t],x[i]]
def backtracking(s,index,curr,res): if curr satisfied output condition: res.add(curr) return for i in range(index,len(s)): curr.add(s[i]) if curr satisfied condition y: backtracking(i+1,curr,res) curr.pop()
def queen(index,N,curr,res): if index == N: res[0]+=1 return for i in range(N): curr[index] = i if valided(index): queen(index+1,N,curr,res) def valid(index): k=0 while k<index: if curr[k]==curr[index]: return False if abs(curr[k]-curr[index])==i-k: return False return True
def nQueens(N): res = [0] curr = [0]*N queen(0,N,curr,res) return res
def permutation(s,visited,curr,res): if curr not in res and curr !="": res.add(curr) for i in range(len(s)): if not visited[i]: visited[i] = True curr+=s[i] permutation(s,viisted,curr,res) visited[i] = False curr = curr[:-1] def use(s): visited = [False]*len(s) curr = "" res = set() permutation(s,visited,curr,res) return res
def combination(s,index,k,curr,res): if len(curr) == k and curr not in res: res.add(curr) return for i in range(index,len(s)): curr+=s[i] combination(s,i+1,k,curr,res) cur = cur[:-1] def use(s,k): res = set() combination(s,0,k,"",res) return len(res)