一个问题没解决:
以下if()代码顺序能运行正确
if(grid == NULL || row == 0 || col == 0 || i >= row || i < 0 || j >= col || j < 0 || grid[i][j] != 1 )
但是这个顺序不正确:试了很多种,必须要把grid[i][j]作为if的最后一个判断条件,这是个什么毛病?????
if(grid == NULL || grid[i][j] != 1 || row == 0 || col == 0 || i >= row || i < 0 || j >= col || j < 0 )
** #define MAX_TWO(a, b) (((a) > (b)) ? (a) : (b))
void digui(int **grid,int row,int col,int i,int j,int *area)
{
if(grid == NULL || row == 0 || col == 0 || i >= row || i < 0 || j >= col || j < 0 || grid[i][j] != 1 )
{
return;
}
*area = *area + 1; //首先加上它本身这个点(临时变量)
grid[i][j] = 0; //把递归过的点置为0,避免重复计算
digui(grid,row,col,i,j-1,area); //递归 上点
digui(grid,row,col,i,j+1,area); //递归 下点
digui(grid,row,col,i-1,j,area); //递归 左点
digui(grid,row,col,i+1,j,area); //递归 右点
}
int maxAreaOfIsland(int** grid, int gridSize, int* gridColSize)
{
int con = 0; //存放每个点的周边区域数量
int max = 0;
if(grid == NULL || gridSize == 0 || *gridColSize == 0 || gridColSize == NULL) return 0;
int i,j;
for(i = 0;i < gridSize;i++)
{
for(j = 0;j < *gridColSize;j++)
{
if(grid[i][j] == 1)
{
con = 0;
digui( grid,gridSize,*gridColSize,i,j,&con );
max = MAX_TWO(con,max);
}
}
}
return max;
}
**