問題:0と1を含む空でない2次元配列グリッドがあるとします。
島は、いくつかの隣接する1(土地を表す)の組み合わせです。ここでの「隣接」では、2つの1が水平方向または垂直方向に互いに隣接している必要があります。グリッドの4つのエッジすべてが0(水を表す)で囲まれていると想定できます。
与えられた2次元配列で最大の島の領域を見つけます。(島がない場合、返される領域は0です。)
ソース:LeetCode
リンク:https ://leetcode-cn.com/problems/max-area-of-island
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
DFSブルートフォースクラッキング:
int dfs(int row,int col,int** grid, int gridSize, int* gridColSize){
if(row<0||row>=gridSize||col<0||col>=*gridColSize||grid[row][col]==0){
return 0;
}
grid[row][col]=0;
int count =1;
count += dfs(row-1,col,grid, gridSize, gridColSize);
count += dfs(row+1,col,grid, gridSize, gridColSize);
count += dfs(row,col-1,grid, gridSize, gridColSize);
count += dfs(row,col+1,grid, gridSize, gridColSize);
return count;
}
int maxAreaOfIsland(int** grid, int gridSize, int* gridColSize){
int result=0;
for(int i=0;i<gridSize;i++){
for(int j=0;j< *gridColSize;j++){
if(grid[i][j]==1){
const int result_temp = dfs(i,j,grid,gridSize,gridColSize);
result = (result<result_temp)?result_temp:result;
}
}
}
return result;
}