其他分享
首页 > 其他分享> > 岛屿面积

岛屿面积

作者:互联网

【问题描述】

  已知地图中的描述,是根据陆地和海水交错排布的,其中数字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;
} 

 

标签:map,sy,sx,int,面积,岛屿,tail,que
来源: https://www.cnblogs.com/dks0313/p/16559459.html