일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sklearn
- SIFT
- opencv
- AlexNet
- BFS
- 딥러닝
- 그래프 이론
- 강화학습
- Mask Processing
- Reinforcement Learning
- 자료구조
- dynamic programming
- canny edge detection
- machine learning
- 머신러닝
- edge detection
- clustering
- TD
- DP
- Python
- MySQL
- exists
- IN
- MinHeap
- classification
- 백준
- 인공지능
- image processing
- dfs
- C++
- Today
- Total
목록BFS (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$보다 앞에 위치하..
접근법 BFS, DBF의 구조를 이해했다면, 이 문제를 보고 바로 BFS를 떠올렸을 것이다. BFS는 너비 탐색이다. 문제를 보면, 토마토는 익은 토마토에 의해서만 익을 수 있고, 우리는 전체 토마토가 익는 최소 일수를 구해야 한다. 따라서 BFS의 접근법이 더 맞다. 또한, 이전엔 노드와 노드사이의 하나의 간선만 존재하였다. 하지만, 익은 토마토를 기준으로 상,하,좌,우를 모두 탐색해야 한다. 그리고 시작 노드는 처음 토마토가 주어졌을 때 모든 익은 토마토에 대하여 시작해야 한다. 3번재 예제를 살펴보면, (0,0),(4,6)의 토마토가 처음 익은 토마토로 주어졌다. 따라서 시작 노드를 (0,0) 하나로 특정하면, (6,4)에 의해 익어진 토마토의 경우의 수를 고려하지 못하기 때문이다. BFS의 기본..
접근법 가장 기본적인 BFS/DFS 문제 중 하나이다. 이번 포스팅에서는 BFS에 대하여 알아보고, BFS 방식으로 풀어볼 것이다. 물론, DFS로 풀어도 상관없다. BFS(Breadth First Search)BFS는 너비 우선 탐색 방법이다. 순서는 다음과 같다. 1. 시작 노드 StartNode 방문.2. 노드 StartNode에 인접한 정점 중 방문하지 않은 정점에 대하여 모두 Queue에 저장3. Queue에서 정점을 삭제하면서 새로운 StartNode를 설정하고, 단계(1)을 수행4. Queue가 Empty 상태이면 종료 이에 대한 수도코드는 다음과 같다. 수도코드 기반으로 그대로 구현하면 된다. 3번 과정에서 Queue에 저장한 노드들에 대하여 단계 1을 반복하므로 while문으로 반복 중..
접근법 Sudo Code 기반으로 작성하면 쉽게 해결 가능하다. sort()를 이용해서 정렬을 통해 정점 번호를 오름차순으로 방문 하였지만, 추후 다른 정렬 기법 기반으로 정렬을 구현할 필요는 보인다. 정답 #include #include #include #include using namespace std; vector ars32_Graph[100001]; bool arb_Visited[100001] = { false }; int32_t ars32_Result[100001]; void bfs(int32_t s32_R); int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int32_t s32_N, s32_M, s32_..
접근법 처음에는 배열 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..