深度优先搜索求解岛屿的最大面积
- 思路:
从二维数组起始位置开始搜索,在遇到其值为1时,搜索其水平或垂直方向,如果为1,则面积加1,遍历该位置同时,将其值修改为0,以免重复搜索;如果为0,则进行回溯。
- 代码:
/*********************深度优先搜索代码*********************/
void dfs(int **grid, int x, int y, int n, int m, int *len)
{
if(grid[x][y])
{
int dx[4] = {0, 0, -1, 1}; //与dy相对应,用于水平或垂直方向搜索时,修改x坐标
int dy[4] = {1, -1, 0, 0}; //与d相对应,用于水平或垂直方向搜索时,修改坐标
(*len)++;
grid[x][y]=0;
for(int i=0;i<4;i++)
{
int mx = x+dx[i];
int my = y+dy[i];
if(mx>=0&&mx<n&&my>=0&&my<m)
dfs(grid, mx, my, n, m, len);
}
}
}
int maxAreaOfIsland(int** grid, int gridSize, int* gridColSize)
{
int max=0; //记录最大面积
for(int i=0;i<gridSize;i++)
for(int j=0;j<gridColSize[0];j++)
{
int len=0; //记录本次搜索面积
if(grid[i][j])
dfs(grid, i, j, gridSize, gridColSize[0], &len);
if(len>max)
max=len;
}
return max;
}