classSolution{public:intnumIslands(vector<vector<char>>&grid){constintm=grid.size();constintn=grid[0].size();constvector<int>dirs{0,1,0,-1,0};intans=0;autobfs=[&](intr,intc){queue<pair<int,int>>q{{{r,c}}};grid[r][c]='2';// Mark '2' as visitedwhile(!q.empty()){constauto[i,j]=q.front();q.pop();for(intk=0;k<4;++k){constintx=i+dirs[k];constinty=j+dirs[k+1];if(x<0||x==m||y<0||y==n)continue;if(grid[x][y]!='1')continue;q.emplace(x,y);grid[x][y]='2';// Mark '2' as visited}}};for(inti=0;i<m;++i)for(intj=0;j<n;++j)if(grid[i][j]=='1'){bfs(i,j);++ans;}returnans;}};
classSolution{publicintnumIslands(char[][]grid){intans=0;for(inti=0;i<grid.length;++i)for(intj=0;j<grid[0].length;++j)if(grid[i][j]=='1'){bfs(grid,i,j);++ans;}returnans;}privatestaticfinalint[]dirs={0,1,0,-1,0};privatevoidbfs(char[][]grid,intr,intc){Queue<int[]>q=newArrayDeque<>();q.offer(newint[]{r,c});grid[r][c]='2';// Mark '2' as visitedwhile(!q.isEmpty()){finalinti=q.peek()[0];finalintj=q.poll()[1];for(intk=0;k<4;++k){finalintx=i+dirs[k];finalinty=j+dirs[k+1];if(x<0||x==grid.length||y<0||y==grid[0].length)continue;if(grid[x][y]!='1')continue;q.offer(newint[]{x,y});grid[x][y]='2';// Mark '2' as visited}}}}
classSolution:defnumIslands(self,grid:List[List[str]])->int:m=len(grid)n=len(grid[0])dirs=[0,1,0,-1,0]defbfs(r,c):q=deque([(r,c)])grid[r][c]='2'# Mark '2' as visitedwhileq:i,j=q.popleft()forkinrange(4):x=i+dirs[k]y=j+dirs[k+1]ifx<0orx==mory<0ory==n:continueifgrid[x][y]!='1':continueq.append((x,y))grid[x][y]='2'# Mark '2' as visitedans=0foriinrange(m):forjinrange(n):ifgrid[i][j]=='1':bfs(i,j)ans+=1returnans