岛屿数量

146 阅读1分钟

image.png 链接:www.nowcoder.com/practice/0c… 这题,错了2次,第一次是因为写了2个i,重复了;第二次是因为if(i<0||i>=grid.size()) return;写成了if(i<0||i>grid.size()) return; 所以会发生段错误。实在是太粗心了\

思路:dfs搜索,没什么好说的

class Solution {
public:
    /**
     * 判断岛屿数量
     * @param grid char字符型vector<vector<>> 
     * @return int整型
     */
    int dx[4] = {-1,1,0,0};
    int dy[4] = {0,0,1,-1};
    void dfs(vector<vector<char> >& grid,vector<vector<bool> > &vis,int i,int j)
    {
        if(i<0||i>=grid.size()) return;
        if(j<0||j>=grid[0].size()) return;
        if(grid[i][j]=='0' || vis[i][j]) return ;
        vis[i][j] = true;
//         cout<<i<<' '<<j<<endl;
        for(int ca=0;ca<4;ca++) {
//             cout<<i+dx[ca]<<'!'<<j+dy[ca]<<endl;
            dfs(grid, vis, i+dx[ca], j+dy[ca]);
        }
    }
    int solve(vector<vector<char> >& grid) {
        // write code here
        if(grid.empty() || grid[0].empty()) return 0;
        int n = grid.size(), m=grid[0].size();
        vector<vector<bool> >vis(n,vector<bool>(m));

        int cnt=0;
        for(int i=0;i<n;i++) {
            for(int j=0;j<m;j++) {
                if(grid[i][j] == '0' || vis[i][j]) continue;
                ++cnt;
                dfs(grid, vis, i, j);
//                 cout<<endl;
            }
        }
        return cnt;
    }
};