leetcode: 200.岛屿数量(图搜索)

本文介绍了一个LeetCode经典题目“岛屿数量”的BFS(宽度优先搜索)解题思路与实现。通过使用队列进行节点遍历,对二维网格中的岛屿进行计数,详细展示了如何从每个岛屿的起点开始,标记并遍历所有相邻的陆地,直至整个岛屿被完全探索。

链接:https://leetcode-cn.com/problems/number-of-islands/

DFS、BFS都行,这里是bfs

class Solution {
    public int numIslands(char[][] grid) {
        int m = grid.length;
        if(m==0)
            return 0;
        int n = grid[0].length;
        int dx[] = {0,1,0,-1};
        int dy[] = {1,0,-1,0};
        int ans = 0;
        for(int i = 0;i<m;i++)
        {
            for(int j = 0;j<n;j++)
            {
                if(grid[i][j]=='1')
                {
                    Queue<Integer> q = new LinkedList();
                    q.add(i*n+j);
                    grid[i][j] = '0';
                    while(!q.isEmpty())
                    {
                        int curr = q.poll();
                        int ii = curr/n;    
                        int jj = curr%n;
                        for(int k = 0;k<4;k++)
                        {
                            if(jj+dx[k]>=0&&jj+dx[k]<n&&ii+dy[k]>=0&&ii+dy[k]<m&&grid[ii+dy[k]][jj+dx[k]]=='1')
                            {
                                grid[ii+dy[k]][jj+dx[k]]='0';
                                int temp = (ii+dy[k])*n+jj+dx[k];
                                q.add(temp);
                            }
                        }
                       
                    }
                    ans++;
                }
            }
        }
        return ans;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值