岛屿面积

【问题描述】

  已知地图中的描述,是根据陆地和海水交错排布的,其中数字1表示陆地,0表示海水,被水围起来的区域称为"岛屿”。已知师徒四人处在(m, n)点,请你按照八戒的提示编写程序,计算所在岛屿的面积。(注: 地图使用二维数组存储,地图的大小不超过50*50)。

  输入: 四个整数m,n,x,y,其中m和n表示图的行和列,x和y表示你所处的横纵坐标。

  输出: 你所在岛屿的面积。(注: 假设地图上的边界点之外均为海水)。

【样例输入】

  6 6 3 4

  0 1 0 1 1 0

  0 0 0 1 1 1

  1 0 1 1 0 1

  0 0 0 1 0 0

  0 1 1 1 1 0

  0 0 0 0 0 0

【样例输出】

  13

复制代码
#include<iostream>
using namespace std;
int m,n,sx,sy;
int map[51][51],head=1,tail=1,cnt=0;
int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
struct node{
    int x, y;
} que[2501];

void bfs(int x, int y){
    // 第一个元素入队。
    que[tail].x=x;
    que[tail].y=y;
    map[x][y]=0;
    tail++;
    cnt++;
    while(head<tail){
        for(int i=0; i<=3; i++){
            int tx=que[head].x + dir[i][0];
            int ty=que[head].y + dir[i][1];
            if(tx>=0&&tx<=m+1&&ty>=0&&ty<=n+1&&map[tx][ty]==1){
                que[tail].x=tx;
                que[tail].y=ty;
                map[tx][ty]=0;
                tail++;
                cnt++;
            }
        }
        head++;
    }
    return;
}


int main(){
    cin>>m>>n>>sx>>sy;
    for(int i=1; i<=m; i++)
        for(int j=1; j<=n; j++)
            cin>>map[i][j];
    bfs(sx,sy);
    cout<<cnt;
    return 0;
} 
复制代码

 

posted @   Hi,小董先生  阅读(309)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示