class Solution {
public:
const int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
bool valid(int x, int y, int h, int w, vector<vector<char> >&grid){
return x >= 0 && x < h && y >= 0 && y < w && grid[x][y] == '1';
}
int numIslands(vector<vector<char>> &grid) {
int h = grid.size();
if(h == 0){
return 0;
}
int w = grid[0].size();
if(w == 0){
return 0;
}
int curIsland = 0;
int checknum = h * w - 1;
while(checknum >= 0){
int lineNum = checknum / w;
int columnNum = checknum % w;
if(grid[lineNum][columnNum] != '1'){//visited
checknum--;
continue;
}
queue<pair<int,int> >qr;
qr.push(make_pair(lineNum, columnNum));
grid[lineNum][columnNum] = '0';
while(!qr.empty()){
pair<int,int> tmpp = qr.front();
qr.pop();
for(int i = 0; i < 4; ++i){
int tmpx = tmpp.first + dir[i][0];
int tmpy = tmpp.second + dir[i][1];
if(valid(tmpx, tmpy, h, w, grid)){
qr.push(make_pair(tmpx, tmpy));
grid[tmpx][tmpy] = '0';
}
}
}
curIsland++;
checknum--;
}
return curIsland;
}
};
错误:矩阵中的每个格子加入队列前就要修改状态(从’1’到’0’)否则后面的bfs过程中会出现重复添加的情况