链接:https://leetcode-cn.com/problems/max-area-of-island/
典型的图搜索问题。
BFS:(java)
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int m = grid.length;
if(m==0)
return 0;
int n = grid[0].length;
int ans = 0;
for(int i = 0;i<m;i++)
{
for(int j = 0;j<n;j++)
{
if(grid[i][j]==1)
{
int area = 0;
Queue<Integer> q = new LinkedList();
q.add(i*n+j);
grid[i][j] = 0;
while(!q.isEmpty())
{
int temp = q.remove();
area++;
int ii = temp/n;
int jj = temp%n;
for(int k = 0;k<4;k++)
{
int x = ii+dx[k];
int y = jj+dy[k];
if(x<m&&x>=0&&y<n&&y>=0&&grid[x][y]==1)
{
q.add(x*n+y);
grid[x][y] = 0;
}
}
}
if(area>ans)
ans = area;
}
}
}
return ans;
}
}
DFS:(C++)
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
if(grid.size()==0)
return 0;
int res = 0;
for( int i = 0;i<grid.size();i++)
for(int j= 0;j<grid[0].size();j++)
res = max(res,dfs(grid,i,j));
return res;
}
int dfs(vector<vector<int>>& grid, int x, int y)
{
if(x<0||y<0||x>=grid.size()||y>=grid[0].size()||grid[x][y]==0)
return 0;
grid[x][y] = 0;
int ans = 1;
ans+=dfs(grid,x-1,y);
ans+=dfs(grid,x,y-1);
ans+=dfs(grid,x+1,y);
ans+=dfs(grid,x,y+1);
return ans;
}
};