leetcode200岛屿的数量

Love The Way You Lie 2022-10-13 05:10 226阅读 0赞

在这里插入图片描述
在这里插入图片描述
思路:

  1. 遇到岛屿为1的时候递归访问其上下左右相邻的路径,递归完后岛屿数量++;
  2. c语言里leetcode和实际使用是不一样的

代码leetcode,**类型指针直接用

  1. void bfs(char** grid, int h,int w, int high,int width){
  2. if(h>=high||w>=width||h<0||w<0){
  3. return ;
  4. }
  5. else{
  6. if(grid[h][w]=='1'){
  7. grid[h][w] = '0';
  8. bfs(grid,h+1,w,high,width);
  9. bfs(grid,h-1,w,high,width);
  10. bfs(grid,h,w+1,high,width);
  11. bfs(grid,h,w-1,high,width);
  12. }
  13. }
  14. }
  15. int numIslands(char** grid, int gridSize, int* gridColSize){
  16. int i,j;
  17. int result = 0;
  18. for(i=0;i<gridSize;i++){
  19. for(j=0;j<*gridColSize;j++){
  20. if(grid[i][j]=='1'){
  21. bfs(grid,i,j,gridSize,*gridColSize);
  22. result++;
  23. }
  24. }
  25. }
  26. return result;
  27. }

实际的二维数组访问

  1. #include<stdio.h>
  2. #include<string.h>
  3. void bfs(char** grid, int h,int w, int high,int width){
  4. if(h>=high||w>=width||h<0||w<0){
  5. return ;
  6. }
  7. else{
  8. if(*((char*)grid+h*width+w)=='1'){
  9. printf("bfs grid[%d][%d]=%c\n",h,w,*((char*)grid+h*width+w));
  10. *((char*)grid+h*width+w) = '0';
  11. bfs(grid,h+1,w,high,width);
  12. bfs(grid,h-1,w,high,width);
  13. bfs(grid,h,w+1,high,width);
  14. bfs(grid,h,w-1,high,width);
  15. }
  16. }
  17. }
  18. int numIslands(char** grid, int gridSize, int* gridColSize){
  19. int i,j;
  20. int result = 0;
  21. printf("gridSize=%d ,gridColSize=%d\n",gridSize,* gridColSize);
  22. for(i=0;i<gridSize;i++){
  23. for(j=0;j<*gridColSize;j++){
  24. printf("grid[%d][%d]=%c\n",i,j,*((char*)grid+i*(* gridColSize)+j));
  25. if(*((char*)grid+i*(* gridColSize)+j)=='1'){
  26. bfs(grid,i,j,gridSize,*gridColSize);
  27. result++;
  28. }
  29. }
  30. }
  31. return result;
  32. }
  33. int main(){
  34. char grid[4][5] ={ { '1','1','1','1','0'},
  35. { '1','1','0','1','0'},
  36. { '1','1','0','0','0'},
  37. { '0','0','0','0','0'}};
  38. int len = 5,i,j;
  39. int *p = &len;
  40. int r = 0;
  41. for (i = 0; i<4; i++) {
  42. for (j = 0; j<5; j++) {
  43. printf("%c ",*((char*)grid+i*5+j)); //通过线性计算
  44. }
  45. printf("\n");
  46. }
  47. r = numIslands((char **)grid,4,p);
  48. printf("result = %d\n",r);
  49. return 0;
  50. }

发表评论

表情:
评论列表 (有 0 条评论,226人围观)

还没有评论,来说两句吧...

相关阅读

    相关 200. 岛屿数量

    200. 岛屿数量 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上

    相关 leetcode200. 岛屿数量

    给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包

    相关 leetcode.200岛屿数量

    一、题目描述 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地

    相关 LeetCode200. 岛屿数量

    题目难度:中等 题目描述: > 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 > 岛屿总是被水包围,并且每座岛屿只能由水平方