섬 유형 알고리즘 문제 - letcode 섬의 최대 면적
한 섬 은 인접 한 1 (토 지 를 대표 하 는 것) 로 구 성 된 조합 으로 이곳 의 '인접' 은 두 개의 1 이 반드시 수평 또는 수직 방향 에서 인접 해 야 한다 고 요구한다.grid 의 네 가장자리 가 0 (대표 물) 에 둘러싸 여 있다 고 가정 할 수 있 습 니 다.
주어진 2 차원 배열 중 가장 큰 섬 면적 을 찾 아 라.(섬 이 없 으 면 귀환 면적 은 0 이다.)
예시 1:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0] 위 면 에 주어진 행렬 은 6 으로 돌아 가 야 한다.섬 은 수평 이나 수직의 네 방향 만 포함 할 수 있 기 때문에 11 이 아니 라 는 것 을 주의해 야 한다.
예시 2:
[[0, 0, 0, 0, 0, 0, 0, 0] 위 에 주어진 행렬 에 대해 0 을 되 돌려 줍 니 다.
메모: 주어진 매트릭스 grid 의 길이 와 너비 가 50 을 초과 하지 않 습 니 다.
class Solution {
public:
int dfs(vector<vector<int>>& grid, vector<vector<int>>& vis, int x, int y,int rows,int cols, int &rest,int cnt) {
// rest==0
if (rest == 0) return cnt;
// cout<
if(grid[x][y]!=1|| vis[x][y]==1) return cnt;
// rest--
--rest;
//
vis[x][y] = 1;
//dfs
/*
4
*/
if (x+1<rows && vis[x+1][y]!=1 && grid[x+1][y]==1) {
cnt=dfs(grid, vis, x+1, y, rows, cols, rest,++cnt);
}
if (y + 1 < cols && vis[x][y+1] != 1 && grid[x][y+1] == 1) {
cnt=dfs(grid, vis, x, y+1, rows, cols, rest,++cnt);
}
if (x - 1 >=0 && vis[x - 1][y] != 1 && grid[x - 1][y] == 1) {
cnt=dfs(grid, vis, x-1, y, rows, cols, rest,++cnt);
}
if (y - 1 >=0 && vis[x][y-1] != 1 && grid[x][y-1] == 1) {
cnt=dfs(grid, vis, x, y-1, rows, cols, rest,++cnt);
}
return cnt;
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int rest = 0,cnt=0;
int rows = grid.size();
if(rows==0){
return 0;
}
int cols = grid[0].size();
vector<vector<int>> vis(rows, vector<int>(cols));
// rest
for (int i = 0; i < rows;++i) {
for (int j = 0; j < cols;++j) {
if (grid[i][j] ==1) {
++rest;
}
}
}
//numIslands
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
if (rest == 0) break;
if (grid[i][j] == 1 && vis[i][j]!=1) {
// cnt++;
cnt=max(cnt,dfs(grid,vis,i,j,rows,cols,rest,1));
}
}
if (rest == 0) break;
}
return cnt;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
0부터 시작하는 LeetCode Day8 「1302. Deepest Leaves Sum」해외에서는 엔지니어의 면접에 있어서 코딩 테스트라고 하는 것이 행해지는 것 같고, 많은 경우, 특정의 함수나 클래스를 주제에 따라 실장한다고 하는 것이 메인이다. 빠른 이야기가 본고장에서도 행해지고 있는 것 같은 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.