200. 岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]
输出:1
示例 2:
输入:grid = [
[“1”,“1”,“0”,“0”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“1”,“0”,“0”],
[“0”,“0”,“0”,“1”,“1”]
]
输出:3
这题挺有趣的,感兴趣的可以学习一下,解题代码如下:
void dfs(int **r,char **grid,int n,int m,int x,int y){
int direcion[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int i;
for(i=0;i<4;i++){
int x0=x+direcion[i][0];
int y0=y+direcion[i][1];
if(x0>=0&&x0<n&&y0>=0&&y0<m){
if(r[x0][y0]==1&&grid[x0][y0]=='1'){
r[x0][y0]=0;
dfs(r,grid,n,m,x0,y0);
}
}
}
}
int numIslands(char** grid, int gridSize, int* gridColSize){
int n=gridSize,m=gridColSize[0];
int **r=(int **)malloc(sizeof(int *)*n);
int i;
int count=0;
for(i=0;i<n;i++){
r[i]=(int *)malloc(sizeof(int)*m);
}
// printf("df");
int j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
r[i][j]=1;
}
}
// printf("df");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(r[i][j]==1&&grid[i][j]=='1'){
r[i][j]=0;
dfs(r,grid,n,m,i,j);
count++;
}
}
}
// printf("df");
return count;
}