广度搜索基本格式:
初始化与第一个点入queue;
while(栈不为空){
取queue front的一个点,以这个点为起点;将这个点pop
对这个点根据题要求进行处理
for(){
向这点的所有方向走一下
将走过之后的点push到queue之中。
}
}
注意,是在走的过程之中将点push到queue之中。
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
int row=grid.size(),col=grid[0].size();
int i=0,j=0;
int bi=0,bj=0;
int cnt=0,ans=0;
int w;
int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};//左上右下
cout<<"#"<<row<<" "<<col<<endl;
for(i=0;i<row;i++){
for(j=0;j<col;j++){
cnt=0;
queue<int> qi;queue<int>qj;
qi.push(i);qj.push(j);
while(!qi.empty()){
int curi=qi.front(),curj=qj.front();
qi.pop();qj.pop();
if(!((0<=curi && curi<row)&&(0<=curj&&curj<col)) || grid[curi][curj]==0){
// if(curi < 0 || curj < 0 || curi == grid.size() || curj == grid[0].size() || grid[curi][curj] != 1){
continue;//if (outofbound || notland): skiptonext
}
cnt++;
grid[curi][curj]=0;//因为每个点只能走一遍,所以走过的需要标记。因为不想重新建一个数组,所以直接改原来的。广搜在实践上是可以走重复路线的,而此处不要走重复路线,所以要把路堵死。
for(w=0;w<4;w++){
int nexti=curi+dir[w][0],nextj=curj+dir[w][1];
qi.push(nexti);qj.push(nextj);
}
}
ans=max(ans,cnt);
}
}
return ans;
}
};