题目链接:200. 岛屿数量 - 力扣(LeetCode)
本题由于没有给出开始搜索的位置,所以每一个位置都要进行一次广度优先搜索
另外为了不修改原数组数据,需要设置一个bool类型的二维数组vis来判断某个位置是否被搜索过
class Solution {int dx[4]={1,-1,0,0};int dy[4]={0,0,1,-1};typedef pair<int,int> PII;int m=0,n=0;vector<vector<bool>> vis;//指示数组,指示某个位置是否被搜索过
public:int numIslands(vector<vector<char>>& grid) {int ret=0;//岛屿数量m=grid.size();n=grid[0].size();vis.resize(m);//初始化指示数组for(int i=0;i<m;++i)//初始化指示数组{vis[i].resize(n);for(int j=0;j<n;++j) vis[i][j]=false;}//每个位置都要进行一次广度优先搜索for(int i=0;i<m;++i){for(int j=0;j<n;++j){if(grid[i][j]=='1'&&!vis[i][j]){++ret;//广度优先搜索bfs(grid,i,j);}}}return ret;} //广度优先搜索void bfs(vector<vector<char>>& grid,int i,int j){queue<PII> q;q.push({i,j});vis[i][j]=true;while(q.size()){int a=q.front().first;int b=q.front().second;q.pop();for(int k=0;k<4;++k){int x=a+dx[k];int y=b+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]=='1'&&!vis[x][y]){q.push({x,y});vis[x][y]=true;}} }}
};