✅ BFS ✅ 최단거리
최소거리 문제이므로 BFS 사용
int map[1001][1001]
int dist[1001][1001]
queue<pair<int, int>> que
dx[4] = {0, 1, 0, -1}
dy[4] = {1, 0, -1, 0}
BFS(){
while(!que.empty){
x = que.front.second
y = que.front.first
que.pop
for(i : 0 ~ 3){
nx = x + dx[i]
ny = y + dy[i]
if(nx < 0 || ny < 0 || nx >= M || ny >= N) continue
if(map[ny][nx] == 1 || map[ny][nx] == -1) continue // 이미 방문했거나 토마토가 없는 지점은 이동 불가
map[ny][nx] = 1
dist[ny][nx] = dist[Y][X] + 1
day = dist[ny][nx] // 끝나는 지점이 하나로 정해져 있지 않기 때문에 최종값 day도 최신화 해줘야 한다.
}
}
}
main(){
cin >> M >> N
for(i : 0 ~ N-1){
for(j : 0 ~ M-1){
cin >> map[i][j]
if(map[i][j] == 1) que.push({i,j})
}
}
BFS()
for(i : 0 ~ N-1){
for(j : 0 ~ M-1){
if(map[i][j] == 0){
cout << -1
return
}
}
}
cout << day
}
O(N^2)
시작점이 여러개라는 것과 끝나는 지점이 정해져 있지 않다는 것이 특이했던 문제