代码随想录:岛屿数量

主要问题是边界条件,因为创建数组的时候是从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;
}
posted @ 2025-02-08 18:29  huigugu  阅读(7)  评论(0编辑  收藏  举报