dfslieti

这篇文章是一个编程问题,描述了oibh总部遭遇洪水,通过给定的围墙建设图,计算有多少个未被洪水淹没的重要区域。代码给出了遍历和标记的方法。
摘要由CSDN通过智能技术生成

oibh 总部突然被水淹没了!现在需要你的救援……

题目描述
oibh 被突来的洪水淹没了,还好 oibh 总部有在某些重要的地方起一些围墙。用 * 号表示,而一个四面被围墙围住的区域洪水是进不去的。

oibh 总部内部也有许多重要区域,每个重要区域在图中用一个 0 表示。

现在给出 oibh 的围墙建设图,问有多少个没被洪水淹到的重要区域。

输入格式
第一行为两个正整数 

x,y。

接下来 

x 行,每行 

y 个整数,由 * 和 0 组成,表示 oibh 总部的建设图。

4 5
00000
00*00
0*0*0
00*00

#include<bits/stdc++.h>
using namespace std;
int n,m,s=0;
int kx[5]={0,1,-1,0,0};
int ky[5]={0,0,0,1,-1};
int a[501][501];
void xz(int x,int y){
    a[x][y]=1;
    for(int i=1;i<=4;i++)
   {
        int dx=x+kx[i];
        int dy=y+ky[i];
        if(dx>0&&dx<=n&&dy>0&&dy<=m&&a[dx][dy]==0)
            xz(x0,y0);
    }
}
int main(){
    cin>>n>>m;
    char e;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>e;
            if(e=='*')
               a[i][j]=1;
            else 
               a[i][j]=0;
        }
    }
    for(int i=1;i<=n;i++)
   {
        if(a[i][1]==0)
        xz(i,1);
        if(a[i][m]==0)
        xz(i,m);
    }
    for(int i=1;i<=m;i++)
   {
        if(a[1][i]==0)
           xz(1,i);
        if(a[n][i]==0)
          xz(n,i);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==0)
                s++;
        }
    }
    cout<<s;
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值