def checknode (v) : #node
	if promising(v):
		if there is a solution at v :
        	write the solution
        else :
        	for u in each child of v :
            	checknode(u)

power Set 

어떤 집합의 공집합과 자기자신을 포함한 모든 부분집합

구하고자 하는 어떤 집합의 원소 개수가 n 일 경우 부분집합의 개수는 2 ^n 이나옴

 

### 백트래킹 방법

def backtrack(a, k, input) :
	global MAXCANDUDATES
    c = [0]*MAXCANDIDATES
    
    if k = input :
    	process_solution(a, k)
    else:
    	k+=1
        ncandidates = construct_candidates(a, k, input, c)
        for i in range(ncandidates):
        	a[k] = c[i]
            backtrack(a,k,input)

def construck_candidates(a, k, input, c):
	c[0] = True
    c[1] = False
    return 2
    
MAXCANDIDATES = 100
NMAX = 100
a = [0] * NMAX
backtrack(a, 0, 3)

### 순열백트래킹

def backtrack(a, k, input) :
	global MAXCANDUDATES
    c = [0]*MAXCANDIDATES
    
    if k = input :
    	for i in range(1,k+1):
        	print(a[i], end=" ")
        print()
    else:
    	k+=1
        ncandidates = construct_candidates(a, k, input, c)
        for i in range(ncandidates):
        	a[k] = c[i]
            backtrack(a,k,input)

def construck_candidates(a, k, input, c):
	in_perm = [False]*NMAX
    
    for i in range(1,k):
    	in_perm[a[i]] = True
        
    ncandidates = 0 
    for i in range(1, input+1):
    	if in_perm[i] == False:
        	c[ncandidates] = i
            ncandidates += 1
        return ncandidates

 

'+++++SW 일일 공부+++++ > SW Expert Aademy' 카테고리의 다른 글

Queue 에대하여  (0) 2020.04.22
SW 분할 정복  (0) 2020.04.19
SW 계산방법  (0) 2020.04.19
트리구조의 모든 집합 구하기 시프트 활용  (0) 2020.04.09
stack  (0) 2020.03.26
블로그 이미지

Or71nH

,