너비우선탐색이란 무엇일까?
깊이가아니라 넓게탐색한다는 의미인것 같은 생각이 든다.
넓게탐색한다는건 뭘까?
시작지점에서 가까운(인접한) 곳부터 탐색한다는 의미가 아닐까?
그렇다면 어떻게구현을해야할까?
Queue와 이중배열을 이용하여 구현하도록 하자.
이중배열로 지점에대한 정보를 만들어 그래프화 한다.
아래의 내용으로보면 이중배열의 1번째값에 2,3,8이 들어가있는데
이는 1이 2,3,8과 인접한다는 의미이다.
따라서 해당 배열을 돌면서 큐에 들어간내용이있는지를 확인하며 없으면 큐에 넣어주고
입력된순서대로 빼주는 모양이다.
import java.util.LinkedList;
import java.util.Queue;
public class BFS{
public static void main(String[] args){
int[][]graph = {{},{2,3,8},{1,7},{1,4,5},{3,5},{3,4},{7},{2,6,8},{1,7}};
boolean[] visited = {false,false,false,false,false,false,false,false,false};
int start = 1; //시작노드
//Queue구현
Queue<Integer> queue = new LinkedList<>();
queue.add(start);
visited[start] = true;
while(!queue.isEmpty()){
int v = queue.poll();
System.out.println(v+" ");
for (int i : graph[v]){
if(visited[i] == false){
queue.add(i);
visited[i] = true;
}
}
}
}
}
'알고리즘 > 알고리즘(java,프로그래머스1,2단계위주)' 카테고리의 다른 글
문자열 내 p와 y의 개수 (0) | 2022.09.21 |
---|---|
핸드폰번호 가리기 (0) | 2022.09.21 |
자릿수 더하기 (1) | 2022.09.21 |
소수만들기 (0) | 2021.09.19 |
키패드 누르기 (0) | 2021.09.17 |