BFS 알고리즘 정리
너비 우선 탐색 문제 풀이 패턴입니다.
기본 구조
Queue<int[]> queue = new LinkedList<>();
boolean[][] visited = new boolean[N][M];
queue.offer(new int[]{0, 0});
visited[0][0] = true;
while (!queue.isEmpty()) {
int[] cur = queue.poll();
// 로직
}깊이 별 더하기
bfs(int x,int y){
...
while(!q.isEmpty()){
int size = q.size();
for(int i = 0 ; i <size;i++){
int cur = q.poll();
visited and so on...
}
size++;
}
...
}
거꾸로 bfs돌리기
시작점이아니라 끝나는점을 기준으로 bfs를 돌리고
grid배열외에
dist 배열을 -1로 초기화하고
q에 넣을 때 0으로 넣게되서 bfs를 돌리면
시작점까지 거리가 나옴.
최소거리를 알 수 있고, 이를 통해 결과를 반환하면 도달할 수 없는 곳은 -1로 초기화되어 바뀌지 않아 해를 구하기 쉽다.