/* 0表示海洋 1~9都表示陆地 startx,starty为着陆地点 算出降落小岛的面积 */#include<iostream> using namespace std; struct node { int x; int y; }; int main() { int a[50][50]; node que[2051]; int n,m; int startx,starty; int tx,ty; int i,j; int k; int head,tail; int book[50][50]={0}; int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int sum; cin>>n>>m>>startx>>starty; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>a[i][j]; } } head=1; tail=1; que[tail].x=startx; que[tail].y=starty; book[startx][starty]=1; tail++; sum=1; while(head<tail) { for(k=0;k<4;k++) { tx=que[head].x+next[k][0]; ty=que[head].y+next[k][1]; if(tx<1||tx>n||ty<1||ty>m) { continue; } if(a[tx][ty]>0&&book[tx][ty]==0) { sum++; book[tx][ty]=1; que[tail].x=tx; que[tail].y=ty; tail++; } } head++; } cout<<sum<<endl; return 0; } //注意图的下表起始位置是0开始还是从1开始 //图的边界最大位置解释n-1,m-1 /* 10 10 6 8 1 2 1 0 0 0 0 0 2 3 3 0 2 0 1 2 1 0 1 2 4 0 1 0 1 2 3 2 0 1 3 2 0 0 0 1 2 4 0 0 0 0 0 0 0 0 1 5 3 0 0 1 2 1 0 1 5 4 3 0 0 1 2 3 1 3 6 2 1 0 0 0 3 4 8 9 7 5 0 0 0 0 0 3 7 8 6 0 1 2 0 0 0 0 0 0 0 0 1 0 */
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2025-01-04 20:56:29