VioletaBabel
7576번: 토마토 본문
#include<cstdio>
#include<queue>
using namespace std;
int box[1000][1000];
bool visit[1000][1000];
int m, n, x, y, mx;
queue<int> qx, qy;
int main()
{
scanf("%d %d", &m, &n);
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
{
scanf("%d", &box[i][j]);
if (box[i][j] == 1)
{
qx.push(j);
qy.push(i);
visit[i][j] = 1;
}
}
while (!qx.empty())
{
x = qx.front();
y = qy.front();
qx.pop();
qy.pop();
if(y>0)
if(!visit[y-1][x]++)
if (box[y - 1][x] == 0)
{
box[y - 1][x] = box[y][x] + 1;
mx = (mx > box[y - 1][x]) ? mx : box[y - 1][x];
qx.push(x);
qy.push(y - 1);
}
if (y<n-1)
if (!visit[y + 1][x]++)
if (box[y + 1][x] == 0)
{
box[y + 1][x] = box[y][x] + 1;
mx = (mx > box[y + 1][x]) ? mx : box[y + 1][x];
qx.push(x);
qy.push(y + 1);
}
if (x>0)
if (!visit[y][x - 1]++)
if (box[y][x - 1] == 0)
{
box[y][x - 1] = box[y][x] + 1;
mx = (mx > box[y][x - 1]) ? mx : box[y][x - 1];
qx.push(x - 1);
qy.push(y);
}
if (x<m-1)
if (!visit[y][x + 1]++)
if (box[y][x + 1] == 0)
{
box[y][x + 1] = box[y][x] + 1;
mx = (mx > box[y][x + 1]) ? mx : box[y][x + 1];
qx.push(x + 1);
qy.push(y);
}
}
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
if (box[i][j] == 0)
{
printf("-1");
return 1;
}
mx = (mx == 0) ? mx : mx - 1;
printf("%d", mx);
}
'백준 > 백준-C++' 카테고리의 다른 글
1932번: 숫자삼각형 (0) | 2017.06.10 |
---|---|
2965번: 캥거루 세마리 (0) | 2017.06.10 |
2178번: 미로 탐색 (0) | 2017.06.09 |
2667번: 단지번호붙이기 (0) | 2017.06.09 |
1260번: DFS와 BFS (0) | 2017.06.09 |