白駿2468
標準2468:安全区域
正しいコード
#include <bits/stdc++.h>
using namespace std;
int n;
int a[101][101], visited[101][101];
int m=-1, arr_max=-1;
int dy[4] = {-1,0,1,0}, dx[4] = {0,1,0,-1};
int ny, nx;
void dfs(int y, int x, int h) {
visited[y][x]=1;
for(int i=0; i<4; i++) {
ny = y+dy[i];
nx = x+dx[i];
if(ny<0 || nx<0 || ny>=n || nx>=n) { //배열 벗어나는 경우
continue;
}
if(!visited[ny][nx] && a[ny][nx]>h) {
dfs(ny, nx, h);
}
}
return;
}
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];
}
}
//먼저 최댓값을 구해야 함
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if(a[i][j]>arr_max) {
arr_max = a[i][j];
}
}
}
while(arr_max--) {
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]>arr_max && !visited[i][j]) {
cnt++;
dfs(i, j, arr_max);
}
}
}
if(cnt>m) {
m=cnt;
}
}
cout<<m<<'\n';
return 0;
}
アクセスする配列とcnt値を各ループに初期化することを忘れないでください.Reference
この問題について(白駿2468), 我々は、より多くの情報をここで見つけました https://velog.io/@msdio/백준-2468テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol