백준 풀이 - BFS 기본 문제
문제리뷰
1926 그림
처음에는 시작점 위치 넣는 코드 위치 때문에 헤매고
두번째는 범위 설정을 잘못해서 헤맸다.
범위를 nx > n || ny > n 으로 작성했음 ㅋㅋ
=> 범위는 nx < 0 || nx >= n || ny < 0 || ny >= m
1926 그림
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int n, m;
int canvas[500][500];
int vis[500][500];
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
queue<pair<int, int>> Q;
int cnt;
int maxArea = 0;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
cin >> canvas[i][j];
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(vis[i][j] || canvas[i][j] != 1) continue;
cnt++;
vis[i][j] = 1;
Q.push({i, j});
int temp = 0;
while(!Q.empty()) {
pair<int, int> cur = Q.front(); Q.pop();
//cout << cur.X << ", " << cur.Y << '\n';
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] || canvas[nx][ny] != 1) continue;
vis[nx][ny] = 1;
Q.push({nx, ny});
}
}
if(maxArea < temp) maxArea = temp;
}
}
cout << cnt << '\n' << maxArea;
}
'Problem Solving > 문제풀이' 카테고리의 다른 글
기타:: 230117 일기 (0) | 2023.01.17 |
---|---|
기타:: 230116 일기 (0) | 2023.01.16 |
기타: : 230111 일기 (0) | 2023.01.11 |
기타:: 230106 일기 (0) | 2023.01.07 |
기타:: 230105 일기 (0) | 2023.01.05 |