-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
해결됨
2468 안전 영역
22.06.16 23:37 작성 조회수 147
0
안녕하세요 이제 막 알고리즘 시작한 코린이 입니다. 큰돌님 처음으로 질문 드려봅니다!!
dfs 문제에서 어디서 오류가 났는지를 못찾겠어서 도움 요청드려요..
그리고 꼭 여쭤보고 싶은게 ny랑 nx 또는 y와 x의 순서는 x y 가 아니라 왜 항상 y부터 먼저 사용하는 건가요?
그 부분이 조금 헷갈려서 여쭙고 싶어요 선생님.
#include <bits/stdc++.h>
using namespace std;
const int max_n = 104;
int n, ret, a[max_n][max_n], e[max_n][max_n], h = 1;
bool visited[max_n][max_n];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
void dfs(int y, int x) {
visited[y][x] = 1;
for (int i=0; i<4; ++i) {
int ny = y + dy[i];
int nx = x + dx[i];
if (ny < 0 || ny >= n || nx < 0 || nx >= n) continue;
if (e[ny][nx] == 0 && !visited[ny][nx]) dfs(ny, nx);
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n;
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j) {
cin >> a[i][j];
}
}
while (h <= 100) {
fill(&visited[0][0], &visited[0][0] + max_n * max_n, 0);
int temp = 0;
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j) {
if (e[i][j] == 1) continue;
if (a[i][j] <= h) e[i][j] = 1;
}
}
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j) {
if (e[i][j] == 0 && !visited[i][j]) {
dfs(i, j);
++temp;
}
}
}
ret = max(ret, temp);
++h;
}
cout << ret << "\n";
return 0;
}
답변을 작성해보세요.
1
답변 2