Java教程

岛屿面积

本文主要是介绍岛屿面积,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

【问题描述】

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

 

这篇关于岛屿面积的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!