일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- dynamic programming
- 딥러닝
- canny edge detection
- BFS
- sklearn
- IN
- classification
- AlexNet
- DP
- exists
- 자료구조
- machine learning
- 인공지능
- clustering
- C++
- SIFT
- 강화학습
- MinHeap
- image processing
- 머신러닝
- Mask Processing
- TD
- edge detection
- Python
- 백준
- Reinforcement Learning
- 그래프 이론
- opencv
- MySQL
- dfs
- Today
- Total
목록dfs (5)
JINWOOJUNG
Topological Sorting(위상 정렬)을 배우기 전, 비순환 유향 그래프에 대해서 알아보자. 구체적인 코드보다는 동작과정에 집중한다. Directed Acyclic Graph(DGA) 비순환 유향 그래프DAG는 싸이크링 없는 유향 그래프이다. 왼쪽 그래프가 DAG에 해당된다. 만약 $b Node \to c Node$의 방향이 반대면, 오른쪽과 같이 Cycle이 발생하게 된다. 이와 같은 Cycle이 존재하는 유향 그래프에서는 Topological Sorting을 적용할 수 없다. Topological Sorting 위상정렬 위상 정렬은 DAG에서 정점들을 선형으로 정렬하는 것이다. 이때, $x Node \to y Node$의 간선이 존재하면, $x Node$는 $y Node$보다 앞에 위치하..
접근법 처음에는 배열 index가 다르기에 index를 맞추고자 입력받을 때 1인 경우만 graph 배열에 저장하여 dfs()를 돌 때, 1부터 N까지 각 노드에서 시작하여 끝까지 내려가는 경로 중 지나가는 노드를 따로 저장하여 다시 인접행렬로 출력하도록 구현하였다. import sys import heapq sys.setrecursionlimit(10**6) N = int(input()) graph = [[] for _ in range(N+1)] resultGraph = [[0]* N for _ in range(N)] def dfs(x,y,flag): if x == y and flag == False: flag = True elif x == y and flag == True: heapq.heappush..
접근법 단순히 현재 노드의 부모를 찾는거기 때문에, dfs(),bfs()없이 단순하게 해결할 수 있을 것 같아서 아래와 같이 접근했다. import sys N = int(input()) visited = [0] * (N+1) visited[1] = 1 for _ in range(N-1): x, y = map(int,sys.stdin.readline().split(" ")) if visited[x] != 0: visited[y] = x else: visited[x] = y for i in range(2,N+1): print(visited[i]) 입력받는 두 수 중 하나는 무조건 이전에 언급된 노드여야 루트가 1인 트리를 형성할 수 있다. 따라서 입력받음과 동시에 두 수 중 방문되었던 노드가 있다면 다른 노..
접근법 dfs를 활용하여 접근하였고, 방문하지 않은 노드에 대하여 dfs를 적용한다면, 연결된 노드들을 방문하고 만약 연결이 안된 다른 그룹이 있다면, 연결 요소의 개수를 증가시키고 다시 dfs를 적용시키면 된다. 정답 import sys sys.setrecursionlimit(10**9) M, N= map(int, sys.stdin.readline().split()) visited = [False]*(M+1) graph = [[]for _ in range(M+1)] for _ in range(N): x, y = map(int, sys.stdin.readline().split()) graph[x].append(y) graph[y].append(x) def dfs(start): visited[start] ..
접근법 기본적인 아이디어는 DFS를 생각했고, 여기서 특이점은 R,G를 동일하게 인식해야 한다는 점이다. 따라서 DFS를 적용할 때 B가 아닌 위치를 다른 배열에 체크해 둔 후, 해당 배열에 한번 더 DFS를 적용하여 적록색약인 경우에 구역의 수를 계산 하였다. 정답 import sys sys.setrecursionlimit(10**9) dx = [0,0,-1,1] dy = [-1,1,0,0] N = int(input()) def dfs(x,y,color): image[y][x] = 0 if color != "B": check[y][x] = 1 for i in range(4): X = x + dx[i] Y = y + dy[i] if(0