通过使用 dfs 算法,我试图访问每个岛屿以及调用 dfs 函数的次数 没有。在岛上,我使用了访问过的向量来标记我已经访问过的地方。网格包含 0 和 1。 0表示水,1表示陆地。岛被水包围,由水平或垂直连接相邻的陆地而形成。您可以假设网格的所有四个边都被水包围。
void dfs( vector<vector<int>> &vis,vector<vector<char>>& grid,int di[],int dj[],int i,int j,int n,int m)
{
if(vis[i][j]==1||grid[i][j]=='0')
return;
// int ind=0;
for(int ind=0;ind<4;ind++)
{
vis[i][j]=1;
int ni=i+di[ind];
int nj=j+di[ind];
if(ni>=0&&nj>=0 && ni<n && nj<m && !vis[ni][nj]&&grid[ni][nj]=='1')
dfs(vis,grid,di,dj,ni,nj,n,m);
vis[ni][nj]=1;
}
}
int numIslands(vector<vector<char>>& grid) {
int n=grid.size();
int c=0;
int m=grid[0].size();
vector<vector<int>> vis(n,vector<int>(m,0));
int di[4]={-1,0,0,+1,};
int dj[4]={0,+1,-1,0};
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]=='1' && !vis[i][j])
{
dfs(vis,grid,di,dj,i,j,n,m);
c++;
}
}
}
return c;