bfs即可。不过需要注意,leetcode的判题系统是并发的执行样例,所以使用全局变量可能会出错。
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
struct Point
{
int x,y,step;
Point(int x_,int y_,int step_):x(x_),y(y_),step(step_){}
};
int bfs(int x,int y,int m,int n,vector<vector<int>>& grid)
{
queue<Point> que;
que.push(Point(x,y,1));
bool bit[m+1][n+1];
memset(bit,0,sizeof(bit));
bit[x][y]=1;
int ans=1;
// int b[m+1][n+1];
// memset(b,0,sizeof(b));
// for(int i=0;i<m;i++)
// {
// for(int j=0;j<n;j++)
// {
// b[i][j]=grid[i][j];
// }
// }
while(que.empty()==0)
{
Point tmp=que.front();
que.pop();
for(int i=0;i<4;i++)
{
int nx=tmp.x+dx[i];
int ny=tmp.y+dy[i];
//cout<<nx<<" "<<ny<<endl;
if(nx<0||nx>=m||ny<0||ny>=n) continue;
//cout<<nx<<" "<<ny<<endl;
if(bit[nx][ny]||grid[nx][ny]==0) continue;
que.push(Point(nx,ny,tmp.step+1));
ans++;
bit[nx][ny]=1;
}
}
return ans;
}
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
if(grid.size()==0) return 0;
int m=grid.size();
int n=grid[0].size();
int M=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(grid[i][j]==1)
{
M=max(M,bfs(i,j,m,n,grid));
}
}
}
return M;
}
};