# DFS
어렵지 않은 DFS문제이다.
크기를 고려했을때 모든 홍수의 값에 대해서 돌려도 충분히 돌아가기 때문에 금방 풀 수 있다.
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <math.h>
#include <queue>
#include <set>
#include <list>
#include <utility>
#include <functional>
#define MAX 105
#define INF 987654321
#define MOD 1000000
#pragma warning(disable:4996)
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef pair<float, float> pf;
int n,arr[MAX][MAX],mi=INF,mx=0,ans=1;
int dy[4]={0,0,1,-1},dx[4]={1,-1,0,0};
bool map[MAX][MAX];
void dfs(int y,int x)
{
for(int i=0;i<4;i++)
{
int ty=y+dy[i],tx=x+dx[i];
if(map[ty][tx]==true)
{
map[ty][tx]=false;
dfs(ty,tx);
}
}
}
// 연결된 안전영역을 지워준다.
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int k=1;k<=n;k++)
scanf("%d",&arr[i][k]);
// 입력을 받는다.
for(int i=1;i<=100;i++)
{
int tmp=0;
memset(map,false,sizeof(map));
for(int p=1;p<=n;p++)
for(int q=1;q<=n;q++)
map[p][q]=arr[p][q]<=i?false:true;
// 홍수의 크기 이하의 경우 false로 해준다.
for(int p=1;p<=n;p++)
for(int q=1;q<=n;q++)
if(map[p][q]==true)
{
dfs(p,q);
tmp++;
}
// dfs()가 돌아갈 때 마다 안전영역의 수를 증가시킨다.
ans=ans<tmp?tmp:ans;
}
printf("%d",ans);
return 0;
}'IT > BOJ' 카테고리의 다른 글
| 백준(BOJ) 1261 알고스팟 2 ** (0) | 2018.06.01 |
|---|---|
| 백준(BOJ) 1766 문제집 ** (0) | 2018.06.01 |
| 백준(BOJ) 2623 음악프로그램 *** (0) | 2018.06.01 |
| 백준(BOJ) 1938 통나무 ** (0) | 2018.05.31 |
| 백준(BOJ) 1600 말이 되고픈 원숭이 *** (0) | 2018.05.31 |