- toc {:toc}
๋ฌธ์
NรMํฌ๊ธฐ์ ๋ฐฐ์ด๋ก ํํ๋๋ ๋ฏธ๋ก๊ฐ ์๋ค.
| 1 | 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 1 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 1 | 1 |
๋ฏธ๋ก์์ 1์ ์ด๋ํ ์ ์๋ ์นธ์ ๋ํ๋ด๊ณ , 0์ ์ด๋ํ ์ ์๋ ์นธ์ ๋ํ๋ธ๋ค. ์ด๋ฌํ ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ก์ ๋, (1, 1)์์ ์ถ๋ฐํ์ฌ (N, M)์ ์์น๋ก ์ด๋ํ ๋ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ํ ์นธ์์ ๋ค๋ฅธ ์นธ์ผ๋ก ์ด๋ํ ๋, ์๋ก ์ธ์ ํ ์นธ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ค.
์์ ์์์๋ 15์นธ์ ์ง๋์ผ (N, M)์ ์์น๋ก ์ด๋ํ ์ ์๋ค. ์นธ์ ์ ๋์๋ ์์ ์์น์ ๋์ฐฉ ์์น๋ ํฌํจํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์ ์ N, M(2 โค N, M โค 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ M๊ฐ์ ์ ์๋ก ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ ์๋ค์ ๋ถ์ด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ํญ์ ๋์ฐฉ์์น๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ์ฒ:https://www.acmicpc.net/problem/2178
ํ์ด
BFS/DFS์ ๊ฑฐ๋ฆฌ์ธก์ ๊ฒฝ์ฐ์ด๋ค.
๊ฑฐ๋ฆฌ์ธก์ ๋ฌธ์ ์ ๊ฒฝ์ฐ dist ๋ฐฐ์ด์ ๋ง๋ค์ด์ฃผ๊ณ (0, 0)๋ถํฐ ์์ํด BFS์กฐ๊ฑด์ ๋ง๋ ์นธ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํด์ค๋ค.

์ถ์ฒ: ๋ฐํน๋ ์ ๊ฐ์ข/์ค์ ์๊ณ ๋ฆฌ์ฆ https://blog.encrypted.gg/941?category=773649
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int vis[502][502]; // ๋ฐฉ๋ฌธ ํ์ธ ๋ฐฐ์ด
int dx[4] = {0, -1, 0, 1};
int dy[4] = {-1, 0, 1, 0};
queue<pair<int, int> > q; // 2์ฐจ์ ๋ฐฐ์ด์ด๋ฏ๋ก pair ์ฌ์ฉ
int main(){
ios::sync_with_stdio(0);
cin.tie();
int n, m, val;
int board[502][502];
cin >> n >> m;
for(int i = 0; i < n; i++){ // ๋ณด๋ํ์ ๊ฐ ์
๋ ฅ
for(int j = 0; j < m; j++){
cin >> val;
board[i][j] = val;
}
}
int cnt = 0, area = 0;
for(int row = 0; row < n; row++){
for(int col = 0; col < m; col++){
int temp = 0;
if(vis[row][col] != 0 || board[row][col] != 1) continue; // ์ด๊ธฐ๊ฐ ์ค์
vis[row][col] = 1;
q.push({row, col});
cnt++;
while(!q.empty()){ // 2~4๋ฒ ๊ณผ์
pair<int, int> cur = q.front();
q.pop();
temp++;
for(int dir = 0; dir < 4; dir++){
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if(vis[nx][ny] == 1 || board[nx][ny] != 1) continue;
vis[nx][ny] = 1;
q.push({nx, ny});
}
}
if(area < temp) area = temp;
}
}
cout << cnt << endl;
cout << area << endl;
}