欢迎光临
我们一直在努力

【题解-信息学奥赛一本通】1359:围成面积

题目:1359:围成面积

题目描述

编程计算由“”号围成的下列图形的面积。面积计算方法是统计号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10×10的二维数组中,有“*”围住了15个点,因此面积为15。 在这里插入图片描述

输入

10×10的图形。

输出

输出面积。

时空限制

1s / 64MB

样例输入

0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 1 0 0
0 0 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 1 0
0 1 0 1 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0

样例输出

15

代码

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=10+10;
int n=10,g[N][N],ans,k,sx,sy;
int dx[10]={–1,1,0,0},dy[10]={0,0,–1,1};
int bfs(int x,int y){
queue<PII> q;
q.push({x,y});
g[x][y]=1;
int sum=1;
while(!q.empty()){
PII t=q.front();
q.pop();
for(int i=0;i<4;i++){
int xx=t.first+dx[i],yy=t.second+dy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&!g[xx][yy]){
q.push({xx,yy});
g[xx][yy]=1;
sum++;
}
}
}
return sum;
}
int main(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
cin>>g[i][j];
if(g[i][j]) ans++;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if((i==1||i==n||j==1||j==n)&&!g[i][j])
ans+=bfs(i,j);
cout<<100–ans;
return 0;
}

结果

在这里插入图片描述

赞(0)
未经允许不得转载:171主机测评 » 【题解-信息学奥赛一本通】1359:围成面积
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址