leetcode 日经贴,Cpp code -Number of Islands

来源:互联网 发布:java加密解密的艺术 编辑:程序博客网 时间:2024/06/07 15:08

Number of Islands

class Solution {    const static int dir[][2];public:    void markstart(vector<vector<char> >&grid, int r, int c) {        int n = grid.size(), m = grid[0].size();        queue<int> q;        q.push(r * m + c);        grid[r][c] = '2';        while (!q.empty()) {            r = q.front() / m;            c = q.front() % m;            q.pop();                        for (int i = 0; i < 4; ++i) {                int nr = dir[i][0] + r;                int nc = dir[i][1] + c;                if (nr >= 0 && nr < n && nc >= 0 && nc < m) {                    if (grid[nr][nc] == '1') {                        q.push(nr * m + nc);                        grid[nr][nc] = '2';                    }                }            }        }    }    int numIslands(vector<vector<char>> &grid) {        int n = grid.size();        if (n == 0) return 0;        int m = grid[0].size();        if (m == 0) return 0;        int ans = 0;        for (int i = 0; i < n; ++i) {            for (int j = 0; j < m; ++j) {                if (grid[i][j] == '1') {                    ++ans;                    markstart(grid, i, j);                }            }        }        for (int i = 0; i < n; ++i) {            for (int j = 0; j < m; ++j) {                grid[i][j] = grid[i][j] == '2' ? '1':grid[i][j];            }        }        return ans;    }};const int Solution::dir[][2] = {{-1,0}, {1,0}, {0,1}, {0,-1}};


0 0
原创粉丝点击