红烧鱼国王奇遇记

【问题描述】

  输入第一行包含两个正整数M和N(1<N,M<30)表示人鱼王国的长和宽,下面是一个N行M列的二维数组,其中1表示陆地,0表示海水。输出: 一个整数a,表示陆地把海域分成的份数(斜着方向不算连通)。

【样例输入】

  5 5

  1 0 0 1 0

  0 1 0 0 1

  1 0 1 0 0

  1 0 0 1 1

  0 1 0 1 0

【样例输出】

  6

复制代码
#include<iostream>
using namespace std;
int n, m, a[30][30]={};
// 上->右->下->左。 
int dx[4]={-1,0,1,0}, dy[4]={0,1,0,-1};

void dfs(int x, int y){
    for(int i=0; i<=3; i++){
        int x1=x+dx[i];
        int y1=y+dy[i];
        // 判断遍历的条件。
        if(x1>=1&&x1<=m&&y1>=1&&y1<=n&&a[x1][y1]==0){
            a[x1][y1]=1;
            dfs(x1,y1);
        } 
    } 
    return;
}

int main(){
    int cnt=0;
    cin>>m>>n;
    for(int i=1; i<=m; i++){
        for(int j=1; j<=n; j++){
            cin>>a[i][j];
        }
    }
    // 不管是1还是0尽管搜索。
    for(int i=1; i<=m; i++){
        for(int j=1; j<=n; j++){
            if(a[i][j]==0){ // 如果为0,继续遍历,并且标记为1(连续遍历为0的地方)。 
                a[i][j]=1;
                dfs(i,j);
                cnt++;
            }
        }
    }
    cout<<cnt;
    return 0;
}
复制代码

 

posted @   Hi,小董先生  阅读(284)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示