Search
Duplicate

음식물 피하기

주차
0
문제번호
1743
언어
C++
티어
실버
유형
그래프
BFS
nj_Blog
nj_상태
이해도
풀이
사람
이해도 2
13 more properties

Memo

BFS를 통해 음식물의 크기를 구합니다.
음식물의 크기를 구할 때 마다, 가장 큰 값을 업데이트 해줍니다.

Code

제출 날짜

@4/2/2021

메모리

2036 KB

시간

0 ms
#include <iostream> #include <queue> int N, M, K, ans; bool g_map[101][101]; bool visited[101][101]; int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; std::queue<std::pair<int, int> >q; void input_faster() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { input_faster(); int y,x; std::cin >> N >> M >> K; for (int i = 0 ; i < K ; i++) { std::cin >> y >> x; g_map[y][x] = 1; } } void bfs(int y, int x) { int qy,qx,ny,nx; int cnt = 1; visited[y][x] = 1; q.push({y, x}); while(!q.empty()) { qy = q.front().first; qx = q.front().second; q.pop(); for (int i = 0 ; i < 4 ; i++) { ny = qy + dy[i]; nx = qx + dx[i]; if (ny <= 0 || ny > N || nx <= 0 || nx > M || visited[ny][nx] || !g_map[ny][nx]) continue; visited[ny][nx] = 1; q.push({ny, nx}); cnt++; if (cnt > ans) ans = cnt; } } } void solve() { for (int i = 1 ; i <= N ; i++) for (int j = 1 ; j <= M ; j++) if (!visited[i][j] && g_map[i][j]) bfs(i, j); } void print_val() { std::cout << ans; } int main() { input(); solve(); print_val(); return (0); }
C++
복사