[백준] 2146 | 다리 만들기 | C++
Algorithm/문제풀이
2022. 9. 22. 01:28
풀이의 핵심은 이렇다.
int mem[][]에 섬의 번호 작성
int vis[][]에 다른 섬까지의 거리 작성
set<좌표> S[]로 출발섬의 끝 좌표 수집
1. DFS로 섬들의 번호를 매긴다, 끝 좌표들도 모아준다.
DFS(좌표, 번호):
mem[좌표] <- 번호
4방향 탐색:
새좌표 범위안?:
새 좌표가 아직 섬이고, mem[새좌표]에 작성안됨:
DFS(새좌표, 번호);
새 좌표가 이제 섬이 아니고, mem[새좌표]는 작성안됨:
현재좌표는 섬의 끝좌표이므로 S[섬번호] <- 현재좌표 저장
2. BFS로 다른 섬까지의 거리를 작성한다. 섬에 닿으면 res 갱신
BFS(출발섬번호):
vis <- -1 초기화(여러번 사용하기 때문)
Q 준비,
S[섬번호]에 저장된 좌표들 Q에 삽입
while 큐:
현재좌표 꺼내기
새좌표 만들기
새좌표 범위안?:
vis[새좌표]가 -1?:
vis[새좌표]에 거리값 넣기
Q 삽입
만약 새좌표가 섬인데 출발섬번호와 다르다?:
res <- vis[현재좌표]와 min 갱신
'Algorithm > 문제풀이' 카테고리의 다른 글
[프로그래머스] 크레인 인형 뽑기 | C++ (2) | 2022.12.22 |
---|---|
[백준] 3987 | 보이저 1호 | C++ (0) | 2022.10.14 |
[백준] 1463 | 1로 만들기 | C++ (0) | 2022.09.03 |
[백준] 16198 | 에너지 모으기 | C++ (0) | 2022.09.03 |
[백준] 숨바꼭질 | 1697 | C++ (0) | 2022.08.20 |