再一次认识dfs
做这个题目我经历了,数组越界,xy轴搞反,以及最后计数面积。
不过这都最后一一解决啦。先上代码:
int hen[4]={0,0,1,-1};
int shu[4]={1,-1,0,0};
int n,m;
int dfs(int x,int y,int** grid )
{
if(x<0||y<0||x>=n||y>=m||grid[x][y]!=1)
{
return 0;
}
int count=1;
grid[x][y]=0;
for(int i=0;i<4;i++)
{
int dx=x+hen[i];
int dy=y+shu[i];
count+=dfs(dx,dy,grid);
}
return count;
}
int maxAreaOfIsland(int** grid, int gridSize, int* gridColSize){
n=gridSize;
m=gridColSize[0];
int grids;
int maxgid=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]!=0)
{
grids=dfs(i,j,grid);
maxgid=maxgid>grids?maxgid:grids;
}
}
}
return maxgid;
}
其实数组越界和xy轴搞反是有一定原因的,刚开始越界是因为我没考虑到,上窜下窜的会窜出边界,考虑到了呢,我又脑子不灵光,把xy轴搞反了,继续有着数组越界让我很抓狂。
最后是计数面积了。其实递归里的计数我一直搞不懂,总喜欢搞宏定义的参数来计数。然后我的宏定义又忘了,每一次递归都是有返回值的.....
累加是将上一次的返回值累加起来,所以终于理解递归的计数了芜湖