Search
Duplicate
📗

음식물 피하기

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

문제접근

visited 안한 board가 1인 녀석을 dfs 탐색하여 그 구간 크기를 구하고 매번 그 구간들의 크기를 비교하여 제일 큰 녀석으로 업데이트

놓쳤던 부분

코드

2276 KB

0 ms

#include <iostream> #include <vector> using namespace std; int n,m; int result; vector<vector<int> > board; vector<vector<bool> > visited; int dx[4] = {0, 1, 0, -1}; int dy[4] = {-1, 0, 1, 0}; void dfs(int row, int col) { visited[row][col] = true; result++; for (int i = 0; i < 4; i++) { int nextRow = row + dy[i]; int nextCol = col + dx[i]; if (nextRow < 1 || nextRow > n || nextCol < 1 || nextCol > m) continue ; if (visited[nextRow][nextCol] || board[nextRow][nextCol] == 0) continue ; dfs(nextRow, nextCol); } } int main(void) { int k; int input1, input2; int answer = 0; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m >> k; board.resize(n + 1, vector<int>(m + 1, 0)); visited.resize(n + 1, vector<bool>(m + 1, false)); for (int i = 0; i < k; i++) { cin >> input1 >> input2; board[input1][input2] = 1; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (!visited[i][j] && board[i][j] == 1) { result = 0; dfs(i, j); if (result > answer) answer = result; } } } cout << answer; }
C++
복사