广度优先搜索
int numIslands(vector<vector<char>>& grid) {
int count = 0;
int dir[4][2] = { {1,0},{0,1},{-1,0},{0,-1} };
int m = grid.size();
int n = grid[0].size();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] != '1')
continue;
else if (grid[i][j] == '1') {
count++;
queue<pair<int, int>> q;
q.push(make_pair(i, j));
grid[i][j] = '2';
while (!q.empty()) {
pair<int, int> cur = q.front();
q.pop();
for (int k = 0; k < 4; k++) {
if (cur.first + dir[k][0]>=0&& cur.first + dir[k][0]<m&& cur.second + dir[k][1]>=0&& cur.second + dir[k][1]<n&&grid[cur.first + dir[k][0]][cur.second + dir[k][1]] == '1') {
q.push(make_pair(cur.first + dir[k][0], cur.second + dir[k][1]));
grid[cur.first + dir[k][0]][cur.second + dir[k][1]] = '2';
}
}
}
}
}
}
return count;
}