4 条题解

  • 0
    @ 2025-5-11 2:11:48

    岛屿的个数

    这题用dfs染色法的思想,可以很快解决,简单来说,就是每次进入dfs时,都把周围的陆地都染色,这样保证了每次进入的都是一个新岛屿 代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=505;
    int n,mp[N][N],ans;
    int dx[]={0,1,0,-1};
    int dy[]={1,0,-1,0};
    bool check(int x,int y){
      return (x>=1&&x<=n&&y>=1&&y<=n&&mp[x][y]==1);
    }
    void dfs(int x,int y){
      mp[x][y]=2;
      for(int i=0;i<4;i++){
        int cur_x=x+dx[i],cur_y=y+dy[i];
        if(check(cur_x,cur_y)){
          dfs(cur_x,cur_y);
        }
      }
    }
    int main(){
      cin>>n;
      for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
          cin>>mp[i][j];
        }
      }
      //dfs染色法
      for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
          if(mp[i][j]==1){
            dfs(i,j);
            ans++;
          }
        }
      }
      cout<<ans;
      return 0;
    }
    

    学会了可以试试岛屿个数这道题,也可以用染色法的思想解决~

    信息

    ID
    33
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    33
    已通过
    19
    上传者