卫星照片

本文介绍了一种使用深度优先搜索(DFS)算法解决岛屿数量计算问题的方法。通过遍历矩阵,利用递归调用实现对相连区域的探索,判断岛屿是否为矩形,并分别统计矩形岛屿和非矩形岛屿的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://icpc.upc.edu.cn/problem.php?id=11307

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
char c[100][100],c1[100][100];
int d[4][2]= {{1,0},{0,1},{-1,0},{0,-1}},ans1,ans2,sum,max1,max2,min1,min2,ans,f,i,k1,j,m,n,k;
void dfs(int x,int y)
{
    sum++;
    c1[x][y]='.';
    max1=max(max1,x);
    max2=max(max2,y);
    min1=min(min1,x);
    min2=min(min2,y);
    for (int i=0; i<4; i++)
    {
        int x1=x+d[i][0],y1=y+d[i][1];
        if (x1>=0&&x1<n&&y1>=0&&y1<m&&c1[x1][y1]=='#')
            dfs(x1,y1);
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for (i=0; i<n; i++)
    {
        scanf("%s",&c[i]);
        strcpy(c1[i],c[i]);
    }
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            if (c1[i][j]=='#')
            {
                sum=0;
                max1=0;
                max2=0;
                min1=1000;
                min2=1000;
                dfs(i,j);
                if (sum==(max1-min1+1)*(max2-min2+1))
                    ans1++;
                else
                    ans2++;
            }
    }
    printf("%d\n%d\n",ans1,ans2);
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值