zoukankan      html  css  js  c++  java
  • LeetCode 200.岛屿的个数

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

    示例 1:

    输入:

    11110
    11010
    11000
    00000

    输出: 1


    示例 2:

    输入:

    11000
    11000
    00100
    00011

    输出: 3

    和之前的DFS寻找最短路径不同,这道题没有了终点,所以不需要我们回退时,将点设置为可行。首先找到一个可行点,然后将这个可行点可以到达的地方全部感染,这就是一个岛。我们再搜寻是否有其他未感染可行点,继续感染。

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int arr[4][2] = { 1, 0, -1, 0, 0, 1, 0, -1 };
    void infact(vector<vector<char> >& grid, int i, int j) {
        if (i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size() || grid[i][j] != '1') {
            return;
        }
    
        for (int k = 0; k < 4; ++k) {//上下左右全部都要搜寻完
            grid[i][j] = '2';
            int ni = i + arr[k][0];
            int nj = j + arr[k][1];
            infact(grid, ni, nj);
        }
    }
    
    int numIslands(vector<vector<char>>& grid) {
        int island = 0;
        for (size_t i = 0; i < grid.size(); ++i) {
            for (size_t j = 0; j < grid[0].size(); ++j) {
                if (grid[i][j] == '1') {
                    infact(grid, i, j);
                    ++island;
                }
            }
        }
        return island;
    }
    
    int main()
    {
        vector<vector<char> >  map = {
        {'1','1','1','1','0'},
        {'1','1','0','1','0'},
        {'1','1','0','1','0'},
        {'0','0','1','0','1'}
        };
    
        cout << numIslands(map);
    
        system("PAUSE");
        return 0;
    }
  • 相关阅读:
    小程序swiper组件实现间距轮播
    小程序form静态页面跳转
    批量添加Iconfont图标库图标
    Vant Weapp 有赞小程序UI库 ICON 组件的本地图标路径支持
    $rootScope、$apply、$watch
    EF code first 数据模型创建数据库
    angularjs directive2
    angularjs directive
    angularjs service
    angular repeat
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/10632670.html
Copyright © 2011-2022 走看看