代码随想录:岛屿数量
主要问题是边界条件,因为创建数组的时候是从1开始的,那边界条件就需要注意。
另外还需要注意是两个图都不是全局变量,所有传入的时候需要加引用
#include<iostream>
#include<vector>
using namespace std;
void dfs(vector<vector<int>>& graph,vector<vector<int>>& visited,int x,int y){
//深度搜索四个方向
//上方
if(x>1&&visited[x-1][y]==0){
visited[x-1][y]=1;
if(graph[x-1][y]==1){
dfs(graph,visited,x-1,y);
}
}
if(x<graph.size()-1&&visited[x+1][y]==0){
visited[x+1][y]=1;
if(graph[x+1][y]==1){
dfs(graph,visited,x+1,y);
}
}
//左侧
if(y>1&&visited[x][y-1]==0){
visited[x][y-1]=1;
if(graph[x][y-1]==1){
dfs(graph,visited,x,y-1);
}
}
if(y<graph[1].size()-1&&visited[x][y+1]==0){
visited[x][y+1]=1;
if(graph[x][y+1]==1){
dfs(graph,visited,x,y+1);
}
}
}
int main(){
int res = 0;
int n,m;
cin>>n>>m;
vector<vector<int>>graph(n+1,vector<int>(m+1,0));
vector<vector<int>>visited(n+1,vector<int>(m+1,0));
for(int i = 1;i<=n;i++){
for(int j =1;j<=m;j++){
cin>>graph[i][j];
}
}
for(int i = 1; i <= n;i++){
for(int j = 1;j <= m;j++){
if (graph[i][j] == 1 && visited[i][j] == 0) {
res++;
dfs(graph, visited, i, j);
}
}
}
cout<<res<<endl;
}