#include<stdio.h> int n, m, map[1010][1010], max; struct ABC { int x, y, cnt; }queue[1000010]; int main() { int head = 0, tail = 0; scanf("%d %d", &m, &n); int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { scanf("%d", &map[i][j]); if (map[i][j] == 1) { queue[++tail].x = i; queue[tail].y = j; } } } int fx[] = { 0,-1,1,0 }, fy[] = { 1,0,0,-1 }, tmpx, tmpy; while (head != tail) { head++; for (i = 0; i<4; i++) { tmpx = queue[head].x + fx[i]; tmpy = queue[head].y + fy[i]; if (tmpx >= 1 && tmpx <= n&&tmpy >= 1 && tmpy <= m&&map[tmpx][tmpy] == 0) { queue[++tail].x = tmpx; queue[tail].y = tmpy; queue[tail].cnt = queue[head].cnt + 1; if (queue[tail].cnt>max) { max = queue[tail].cnt; } map[tmpx][tmpy] = 1; } } } for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { if (map[i][j] == 0) { max = -1; } } } printf("%d", max); return 0; }
7576번: 토마토
https://www.acmicpc.net/problem/7576
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기