Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 갭체크
- 항해99
- til
- 코테공부
- 1일1코테
- 99클럽
- 파이썬
- 웹
- 프로그래밍 언어
- 오블완
- 코드트리
- 개발자취업
- 자료구조
- 프로그래머스
- 운영체제
- 코딩테스트
- 티스토리챌린지
- 플로이드-워셜
- 자바
- #코드트리 #코딩테스트 #코테공부 #백트래킹 #알고리즘 기초
- 자바스크립트
- Java
- C
- 코딩테스트사이트추천
- 연결 리스트
- 데이터베이스
- 인접 행렬
- 알고리즘
- 개발자루틴
- 코딩테스트준비
Archives
- Today
- Total
와드의 블로그
그래프 탐색 본문
DFS
그래프를 탐색할 때 한 노드에서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법을 말한다.
검색 속도가 BFS에 비해 느리지만 더 간단하게 구현할 수 있다.
재귀를 이용하여 구현한다.
DFS 구현
static ArrayList<ArrayList<Integer>> adj;
static boolean[] visited;
void dfs(int x) {
visited[x] = true;
for(int nx : adj.get(x)) {
if(visited[nx])
continue;
dfs(nx);
}
}
BFS
그래프를 탐색할 때 시작 노드에서 탐색을 시작하여 인접 노드를 모두 탐색하고 다음 노드를 탐색하는 방법이다.
큐를 이용하여 구현한다.
가중치가 없는 그래프의 최단거리를 구하는 문제에 사용할 수 있다.
BFS 구현
static ArrayList<ArrayList<Integer>> adj;
static int[] visited;
void bfs(int x) {
Queue<Integer> q = new LinkedList<>();
q.add(x);
visited[x] = 1;
while (!q.isEmpty()) {
x = q.poll();
for (int nx : adj.get(x)) {
if (visited[nx] >= 1)
continue;
q.add(nx);
visited[nx] = visited[x] + 1;
}
}
}