leetcode200岛屿的数量
思路:
- 遇到岛屿为1的时候递归访问其上下左右相邻的路径,递归完后岛屿数量++;
- c语言里leetcode和实际使用是不一样的
代码leetcode,**类型指针直接用
void bfs(char** grid, int h,int w, int high,int width){
if(h>=high||w>=width||h<0||w<0){
return ;
}
else{
if(grid[h][w]=='1'){
grid[h][w] = '0';
bfs(grid,h+1,w,high,width);
bfs(grid,h-1,w,high,width);
bfs(grid,h,w+1,high,width);
bfs(grid,h,w-1,high,width);
}
}
}
int numIslands(char** grid, int gridSize, int* gridColSize){
int i,j;
int result = 0;
for(i=0;i<gridSize;i++){
for(j=0;j<*gridColSize;j++){
if(grid[i][j]=='1'){
bfs(grid,i,j,gridSize,*gridColSize);
result++;
}
}
}
return result;
}
实际的二维数组访问
#include<stdio.h>
#include<string.h>
void bfs(char** grid, int h,int w, int high,int width){
if(h>=high||w>=width||h<0||w<0){
return ;
}
else{
if(*((char*)grid+h*width+w)=='1'){
printf("bfs grid[%d][%d]=%c\n",h,w,*((char*)grid+h*width+w));
*((char*)grid+h*width+w) = '0';
bfs(grid,h+1,w,high,width);
bfs(grid,h-1,w,high,width);
bfs(grid,h,w+1,high,width);
bfs(grid,h,w-1,high,width);
}
}
}
int numIslands(char** grid, int gridSize, int* gridColSize){
int i,j;
int result = 0;
printf("gridSize=%d ,gridColSize=%d\n",gridSize,* gridColSize);
for(i=0;i<gridSize;i++){
for(j=0;j<*gridColSize;j++){
printf("grid[%d][%d]=%c\n",i,j,*((char*)grid+i*(* gridColSize)+j));
if(*((char*)grid+i*(* gridColSize)+j)=='1'){
bfs(grid,i,j,gridSize,*gridColSize);
result++;
}
}
}
return result;
}
int main(){
char grid[4][5] ={ { '1','1','1','1','0'},
{ '1','1','0','1','0'},
{ '1','1','0','0','0'},
{ '0','0','0','0','0'}};
int len = 5,i,j;
int *p = &len;
int r = 0;
for (i = 0; i<4; i++) {
for (j = 0; j<5; j++) {
printf("%c ",*((char*)grid+i*5+j)); //通过线性计算
}
printf("\n");
}
r = numIslands((char **)grid,4,p);
printf("result = %d\n",r);
return 0;
}
还没有评论,来说两句吧...