프로그래밍/백준

[C언어/DFS] 2468 : 안전 영역

JINJIN123 2022. 1. 9. 16:14

#include<stdio.h>
#include<string.h>
int visit[105][105]={0,};
int arr[105][105]={0,};
int t;
int dw[4]={0,0,1,-1};
int dh[4]={1,-1,0,0};
void dfs(int i,int k){
	int w,h;
	visit[i][k]=1;
	
	for(int j=0;j<4;j++){
		h=i+dh[j];
		w=k+dw[j];
		if(arr[h][w]>t&&visit[h][w]==0)
			dfs(h,w);
	}
}

int main(void){
	int n,h_max=0,cnt,max;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		for(int k=1;k<=n;k++){
			scanf("%d",&arr[i][k]);
			if(h_max<arr[i][k])
				h_max=arr[i][k];
		}
	}
	
	max=1;//비가 안 올 경우
	for(t=1;t<h_max;t++){
		memset(visit,0,sizeof(visit));
		cnt=0;
		for(int i=1;i<=n;i++){
			for(int k=1;k<=n;k++){
				if(arr[i][k]>t&&visit[i][k]==0){
					cnt++;
					dfs(i,k);
				}
			}
		}
		if(max<cnt)
			max=cnt;
	} 
	
	printf("%d",max);
	return 0;
}