DFS 예외처리

TAEWOO HA·2023년 9월 13일
0

알고리즘

목록 보기
6/6
#include<bits/stdc++.h>
using namespace std;

int dy[4] = { -1,0,1,0 };
int dx[4] = { 0,1,0,-1 };
int a[101][101];
int visited[101][101];
int n, d, cnt, ret = 1;

void dfs(int y, int x, int d) {
	visited[y][x] = 1;
	for (int i = 0; i < 4; i++) {
		int ny = y + dy[i];
		int nx = x + dx[i];
		if (ny < 0 || nx < 0 || ny >= n || nx >= n) continue;
		if (!visited[ny][nx] && a[ny][nx] > d) dfs(ny, nx, d);
	}
	return;

}
int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> a[i][j];
		}
	}
	for (int d = 1; d < 101; d++) {
		fill(&visited[0][0], &visited[0][0] + 101 * 101, 0);
		int cnt = 0;

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (a[i][j] > d && !visited[i][j]) {// 조건만족 , 방문x
					dfs(i, j, d);
					cnt++;
				}

			}
		}
		ret = max(cnt, ret);

	}
	cout << ret << '\n';
	return 0;

}

문제 ) 첫째 줄에는 어떤 지역을 나타내는 2차원 배열의 행과 열의 개수를 나타내는 수 N이 입력된다. N은 2 이상 100 이하의 정수이다. 둘째 줄부터 N개의 각 줄에는 2차원 배열의 첫 번째 행부터 N번째 행까지 순서대로 한 행씩 높이 정보가 입력된다. 각 줄에는 각 행의 첫 번째 열부터 N번째 열까지 N개의 높이 정보를 나타내는 자연수가 빈 칸을 사이에 두고 입력된다. 높이는 1이상 100 이하의 정수이다.

예외) 아무 지역도 물에 잠기지 않을 수도 있다.

==> ret은 최소 1이다.
for문에서 d를 1부터 설정하려면 ret = 1
for문에서 d를 0부터 설정하려면 ret = 0

  • 반례 : 최소 , 최대 , 없거나 , 있거나

0개의 댓글