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
- 자바스크립트
- iscomposing
- 배열 중복 개수 구하기
- map
- fluent-ffmpeg
- 레벨1
- 리액트
- 삼항연산자
- Azure Data Studio
- +연산자
- sort
- 맥에서 MSSQL
- 썸네일 생성
- max
- 이벤트 중복 발생 현상
- substr
- AWS EBS
- math
- indexof
- AWS
- 레벨2
- reduce
- 프로그래머스
- MIN
- fill
- DB 백업 파일 복원
- mssql
- 객체에서 value만 가져오기
- Filter
- array
Archives
- Today
- Total
3은로그
BFS - 자바(JAVA) 본문
728x90
BFS는 너비우선 탐색이다.
그래프를 완전 탐색하는 방법 중 하나로, 시작 노드에서 출발해 시작 노드를 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘이다.
기능 | 특징 | 시간복잡도 |
그래프 완전 탐색 | FIFO(선입선출) Queue 자료구조 이용 |
O(V + E) |
● 너비 우선 탐색은 선입선출 방식으로 탐색하므로 Queue를 이용해 구현한다.
● 시작 노드를 기준으로 가까운 노드를 먼저 방문하기 때문에 도착하는 경로가 여러 개일 때 최단경로를 보장한다.
핵심이론
1. BFS를 시작할 노드 정한 후 사용할 자료구조 초기화
- 방문했던 노드는 다시 방문하지 않으므로 방문한 노드를 체크하기 위한 배열이 필요하다.
- 자료구조는 Queue를 사용한다.
2. Queue에서 노드를 꺼낸 후 꺼낸 노드의 인접 노드를 다시 Queue에 삽입한다.
- Queue에서 노드를 꺼내면서 인접 노드를 다시 Queue에 삽입한다.
- 이때 방문 배열을 체크해서 이미 방문한 노드는 다시 Queue에 삽입하지 않는다.
- 탐색 순서가 필요하면 Queue에서 노드를 꺼내면서 순서를 기록한다.
3. Queue에 남은 노드가 없을 때까지 반복한다.
코드
private static void BFS(int node) {
Queue<Integer> queue = new LinkedList<>();
queue.add(node);
visted[node] = ture;
while(!queue.isEmpty()) {
int now_node = queue.poll();
System.out.println(now_node + "");
for(int i : A[now_node]){
if(!visted[i]) {
queue.add(i);
visted[i] = ture;
}
}
}
}
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 그리디 - 큰 수 만들기 - JAVA (0) | 2023.02.13 |
---|---|
백준 16948 - 데스나이트(그래프) 자바 JAVA (0) | 2023.02.06 |
백준 5567 - 결혼식(그래프) 자바 JAVA (0) | 2023.02.06 |
백준 1931 - 회의실 배정 (정렬) (0) | 2023.01.09 |
백준 9076 - 점수집계 (정렬) (0) | 2023.01.06 |