/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 判断岛屿数量 * @param grid char字符型二维数组 * @param gridRowLen int grid数组行数 * @param gridColLen int* grid数组列数 * @return int整型 */ void iszero(char** a,int i,int j,int row,int col){ if(i>0&&a[i-1][j]=='1'){ //上边 a[i-1][j]='0';iszero(a, i-1, j, row, col); } if(i<row-1&&a[i+1][j]=='1'){ //下边 a[i+1][j]='0';iszero(a, i+1, j, row, col); } if(j<col-1&&a[i][j+1]=='1'){ //右边 a[i][j+1]='0';iszero(a, i, j+1, row, col); } if(j>0&&a[i][j-1]=='1'){ a[i][j-1]='0';iszero(a, i, j-1, row, col); //左边 } } int solve(char** grid, int gridRowLen, int* gridColLen ) { // write code here int i=0,j=0; int num=0; for(i=0;i<gridRowLen;i++){ for(j=0;j<*gridColLen;j++){ if(grid[i][j]=='1'){ //这个是‘1’, grid[i][j]='0'; //这步可以不用,因为向后循环检验,不会再检查这个 iszero(grid, i, j, gridRowLen,*gridColLen); //邻近的上下左右全都查查,并且都置为‘0’ num++; //就相当于,小岛的n块土地都浓缩到这一块,iszero就是浓缩的过程。计数一次 } } } return num; }