1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
   | class Solution { public:     int numIslands(vector<vector<char>>& grid) {         int m = grid.size();         if (m == 0)             return 0;
          int n = grid[0].size();         if (n == 0)             return 0;                      vector<vector<bool> > visited(m, vector<bool>(n, false));         int mvi[4] = {-1, 1, 0, 0};         int mvj[4] = {0, 0, -1, 1};         queue<pair<int, int> > q;         int ans = 0;                  for (int i = 0; i < m; i++) {             for (int j = 0; j < n; j++) {                 if (!visited[i][j] && grid[i][j] == '1') {                     q.push(make_pair(i, j));                     visited[i][j] = true;                     while (!q.empty()) {                         pair<int, int> loc = q.front();                         q.pop();                         int loci = loc.first, locj = loc.second;                         for (int k = 0; k < 4; k++) {                             int curi = loci + mvi[k], curj = locj + mvj[k];                             if (curi >= 0 && curi < m && curj >= 0 && curj < n && grid[curi][curj] == '1' && !visited[curi][curj]) {                                 q.push(make_pair(curi, curj));                                 visited[curi][curj] = true;                             }                         }                     }                     ans++;                 }             }         }
          return ans;     } };
  |