페이지

7576번: 토마토

https://www.acmicpc.net/problem/7576


#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;
}

댓글 없음 :

댓글 쓰기