- μ΄ κΈμ c++λ‘ νμ΄λ₯Ό μμ±νμμ΅λλ€.
λ¬Έμ
μμ
νμ΄
- μμμ μ΄ μ¬λ¬ κ° μλ BFS λ¬Έμ λ‘ BFSμ λν νΉμ§μ΄ μ λλ‘ μμ΄μΌ ν©λλ€.
- BFSλ νμ μ²μ μμμ μ ν κ° λ΄μλ€λ©΄, μ΄ λ¬Έμ λ μμμ μ΄ μ¬λ¬ κ° μμΌλ©΄ μ¬λ¬ κ°λ₯Ό νλμ νμ λ΄κΈ°λ§ νλ©΄ λ©λλ€.
- νμμ frontμ ν΄λΉλλ μμμ μμ BFSλ₯Ό μ§ννκ² λκ³ νΉμ μμμ μ¬λ¬ μμμ μ€ μ²μ λ°©λ¬Έν λκ° μ΅λ¨ 거리μ
λλ€.
#include<iostream>
#include<utility>
#include<queue>
using namespace std;
int n,m;
int arr[1000][1000];
int dist[1000][1000];
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
bool inside(int y, int x){
return 0<=y && y<n && 0<=x && x<m;
}
int main(){
cin>>m>>n;
queue<pair<int,int>> q;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>arr[i][j];
if(arr[i][j] == 1){
dist[i][j] = 1;
q.push({i,j});
}
}
}
while(!q.empty()){
int y = q.front().first;
int x = q.front().second;
q.pop();
for(int i=0;i<4;i++){
int dy = y + dir[i][0];
int dx = x + dir[i][1];
if(inside(dy,dx) && arr[dy][dx] == 0 && !dist[dy][dx]){
dist[dy][dx] = dist[y][x]+1;
q.push({dy,dx});
}
}
}
int ans = 0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(arr[i][j] != -1 && dist[i][j] == 0){
cout<<-1;
return 0;
}
ans = max(ans, dist[i][j]);
}
}
cout<<ans-1;
}
- μΆκ°λ‘ κΆκΈν μ μ΄λ μμ ν λΆλΆ μμΌλ©΄ λκΈλ‘ λ¨κ²¨μ£ΌμΈμ.