-
[Algorithm] - DFS를 통한 모든 경우의 수Algorithm/Algorithm 2022. 9. 24. 01:49
DFS
특정 Start를 기반으로 Node를 재귀로 타고 들어가 자신이 도착하는 경우의 수를 추출한다.
모든 경우의 수 구하기
- 아래 경우에서 Node 1에서 4로 가는 경우의 수를 탐색한다고 하여보자.
- DFS로 구현을 하게 된다면 일반적으로 1-2-3-4 탐색 후 끝나는 것이 일반적이지만, 우리는 모든 경우의 수를 구현해야 한다.
알고리즘
- 기존의 DFS코드를 활용한다.
- 이 때 나머지 경우에도 탐색을 해야하기 때문에 Visited edge값을 되돌려주고 임의의 값을 빼준다.
코드
n = 5 edges = [[1,2],[1,3],[2,3],[2,5],[3,4],[3,5],[5,4]] from collections import defaultdict def solution(n,edges): graphs = defaultdict(list) target = 4 visited = [0]*(n+1) visited[1] = 1 answer = [] temp = [] for start,end in edges: graphs[start].append(end) graphs[end].append(start) def dfs(node): temp.append(node) if node == target : answer.append(temp[:]) return for edge in graphs[node]: if not visited[edge]: #print( node , edge) visited[edge]=1 dfs(edge) #print( 'edge :' , edge) visited[edge]=0 temp.pop() dfs(1) print(answer) solution(n,edges)
'Algorithm > Algorithm' 카테고리의 다른 글
[Algorithm] - 부분합 (0) 2022.09.24 [Algorithm] - LCA ( 최소 공통 조상 ) (0) 2022.09.15 [Algorithm] - 유클리드 호제법 ( 최대 공약수 , 최소 공배수 ) (0) 2022.09.15 [Algorithm] - Bit연산자 부분 집합 (0) 2022.09.07 [Algorithm] - 문자열 알고리즘 (KMP 알고리즘) (0) 2022.09.05