200. 岛屿数量-dfs方法

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;


}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值