일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- anr
- support 라이브러리
- 알고리즘
- 자료구조
- 안드로이드 ANR
- SQLite와 Realm 차이점
- 안드로이드 AdapterView
- android fragment
- db
- 자바 컬렉션
- 너비우선탐색
- Github
- BFS
- 안드로이드 파일
- 백준 알고리즘
- android adapterview
- DFS
- 액티비티 ANR
- android support
- support fragment
- 안드로이드
- 깊이우선탐색
- 안드로이드 DBMS
- 백준
- application not responding
- 컬렉션
- 소수 알고리즘
- 소수
- java
- oracle
Archives
- Today
- Total
밍의 기록들😉
[그래프] 그래프의 탐색 (DFS, BFS) 본문
그래프의 탐색
- DFS : 깊이 우선 탐색
- BFS : 너비 우선 탐색
깊이 우선 탐색(DFS; Depth First Search)
- 스택(=선행관계)을 이용하여 그래프를 탐색하는 방법
- 나를 먼저 방문하고, 그 다음으로 인접한 노드를 차례로 방문(단, 방문했던 노드는 방문하지 않음)
- 스택을 이용해서 갈 수 있는 만큼 최대한 많이 가고 갈 수 없으면 이전 정점으로 돌아간다.
인접 행렬을 이용한 구현 코드
private static void dfs(int x) { check[x] = true; System.out.print(x); for(int i=1; i<=n; i++){ if(a[x][i] == 1 && check[y] == false){ dfs(i); } } }
인접 리스트를 이용한 구현 코드
private static void dfs(int x) { check[x] = true; System.out.print(x); for(int y : a[x]){ if(check[y] == false){ dfs(y); } } }
너비 우선 탐색(BFS; Depth First Search)
- 큐를 이용해서 지금 위치에서 갈 수 있는 것을 모두 큐에 넣는 방식
- 큐에 넣을 때 방문했다고 체크해야 함
인접 리스트(Queue)를 이용한 구현 코드
private static void bfs(int start) { Queue<Integer> q = new LinkedList<Integer>(); q.add(start); check[start] = true; while(!q.isEmpty()){ int x = q.remove(); System.out.print((x); for(int y : a[x]){ if(check[y] == false){ check[y] = true; q.add(y); } } } }
'자료구조, 알고리즘 > 기본다지기' 카테고리의 다른 글
[트리] 트리의 표현 (0) | 2018.09.09 |
---|---|
[트리] 트리의 기본 (0) | 2018.09.09 |
[그래프] 그래프의 표현 (인접 행렬, 인접 리스트, 간선 리스트) (0) | 2018.09.08 |
[그래프] 그래프의 기본 (0) | 2018.09.08 |
[자료구조] 큐(Queue) (1) | 2018.09.05 |
Comments