BFS 참고하세요
263
magenta1507
1 asked
0
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m, k;
int dx[4] = { 1, -1, 0, 0 };
int dy[4] = { 0, 0, 1, -1 };
int main() {
cin >> n >> m >> k;
vector<vector<int>> Map(n + 1, vector<int>(m + 1, 0));
vector<vector<bool>> visited(n + 1, vector<bool>(m + 1, false));
vector<pair<int, int>> flooded;
for (int i = 0; i < k; i++) {
int x, y;
cin >> x >> y;
Map[x][y] = 1;
flooded.push_back({ x, y });
}
int max_size = 0;
for (auto& start : flooded) {
if (visited[start.first][start.second]) continue;
int size = 0;
queue<pair<int, int>> Q;
Q.push(start);
visited[start.first][start.second] = true;
while (!Q.empty()) {
size++;
int x = Q.front().first;
int y = Q.front().second;
Q.pop();
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && Map[nx][ny] == 1 && !visited[nx][ny]) {
Q.push({ nx, ny });
visited[nx][ny] = true;
}
}
}
max_size = max(max_size, size);
}
cout << max_size << endl;
return 0;
}
DFS가 아닌 BFS 사용해도 문제는 풀립니다.
공부중이라 어느게 더 효율적인지는 모르겠습니다만, 혹시 BFS로 접근하실 분들 참고하라고 올려봅니다~
c++
코딩-테스트
Answer 1
0
안녕하세요^^
네. 이 문제와 같은 블러드 필(Blood Fill) 스타일의 문제는 DFS나 BFS나 아무걸로 해도 됩니다. 둘의 큰 차이는 없습니다.
감사합니다.
바둑돌에 조합을 구하는 dfs는 설명이 어딨나요
0
95
1
알고리즘이라.. 강의 설명때 모식도가 있으면 더좋겠어요
0
158
1
BFS 코드 중에 이해가 안되는 부분이 있습니다.
0
217
1
호텔 연결 질문드립니다.
0
157
1
최대 선호 음식 질문드립니다.
0
217
1
숨겨진 합 질문드립니다.
0
150
1
제품이동 질문드립니다.
0
124
1
송아지 찾기2 질문드립니다.
0
124
1
정사각형 그리기 질문드립니다.
0
142
1
호텔연결
0
143
1
중복된 문자 제거 코드
0
215
1
전투게임
0
168
1
숲속의 기사
0
131
1
멀티태스킹 질문드립니다.
0
194
1
숨겨진 합 자바 질문드립니다.
0
135
1
영화관람 시간초과 질문드립니다.
0
191
1
[2-5] 최대선호음식 시간초과..
0
262
1
dp 풀이는 어려운가요?
0
397
2
문제 의문
0
294
2
모의고사 7회 2번 송아지 찾기 테스트케이스 3번, 4번 오류
0
311
1
안녕하세요. 궁금한점이 있어서 질문드립니다.
0
243
1
#include<bits/stdc++.h>
0
757
1
잔디 문제 해설 c로 바꿔서 출력할 때
1
372
1
조합을 구할때 algorithm 함수 next_permutation 사용 가능 여부
0
457
1

