VioletaBabel

7576번: 토마토 본문

백준/백준-C++
7576번: 토마토
Beabletoet 2017. 6. 9. 20:30

#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
Comments