BOJ 1926 C++
코드
#include <bits/stdc++.h>
#define ll long long
using namespace std;
#define X first
#define Y second
int p[501][501];
bool vis[501][501];
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m; cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cin >> p[i][j];
}
queue<pair<int, int>> q;
int mx = 0;
int paper = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
int tmp = 0;
if (p[i][j] && vis[i][j] != 1)
{
vis[i][j] = 1;
q.push({ i,j });
paper++;
tmp = 1;
}
else
continue;
while (!q.empty())
{
pair<int, int> cur = q.front(); q.pop();
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] || p[nx][ny] != 1) continue;
vis[nx][ny] = 1;
q.push({nx,ny});
tmp++;
}
}
mx = max(mx, tmp);
}
}
cout << paper << "\n" << mx;
}
bfs기본 문제입니다. 전역 탐색하면서 1인곳에서 이미 방문한곳이 아니면 카운트 하고 탐색과정에서 tmp로 카운트하여 max함수로 비교하면 쉽게 최대크기를 알 수 있습니다.
Leave a comment