[BOJ] 7576번 토마토

yeham·2022년 11월 6일
0

백준

목록 보기
4/22

문제

토마토

코드

#include <iostream>
#include <vector>
#include <list>
#include <queue>
#include <stack>

using namespace std;

int board[1000][1000];
int visit[1000][1000];
int n, m;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	queue<pair<int, int>> q;
	cin >> m >> n;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			cin >> board[i][j];
	
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (board[i][j] == 1)
			{
				visit[i][j] = 1;
				q.push({i, j});
			}
			if (board[i][j] == -1)
				visit[i][j] = -1;
		}
	}
	int day = 0;
	while (!q.empty())
	{
		pair<int, int> cur = q.front();
		q.pop();
		for (int i = 0; i < 4; i++)
		{
			int nx = cur.first + dx[i];
			int ny = cur.second + dy[i];
			if (nx < 0 || nx >= n || ny < 0 || ny >= m)
				continue;
			if (visit[nx][ny] != 0 || board[nx][ny] != 0)
				continue;
			visit[nx][ny] = visit[cur.first][cur.second] + 1;
			q.push({nx, ny});
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (visit[i][j] == 0)
			{
				cout << -1;
				return (0);
			}
			if (visit[i][j] > day)
				day = visit[i][j];
		}
	}
	cout << day - 1;
	return (0);
}
profile
정통과 / 정처기 & 정통기 / 42seoul 7기 Cardet / 임베디드 SW 개발자

0개의 댓글