1359:围成面积
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 12341 通过数: 6159
【题目描述】
编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10×10的二维数组中,有“*”围住了15个点,因此面积为15。
【输入】
10×10的图形。
【输出】
输出面积。
【输入样例】
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
很明显的广搜题,只不过广搜完需要再数一下"0"的个数既是答案。具体C++14AC码如下:
【C++14AC码】
#include <bits/stdc++.h>
using namespace std;
const int N=105;
int data[N][N],ans=0,n=10;
int dx[5]= {+0,-1,+0,+1,+0};
int dy[5]= {+0,+0,+1,+0,-1};
typedef struct Myinfo {
int x,y;
} Myinfo;
queue<Myinfo> s_que;
void bfs();
int main() {
memset(data,0,sizeof(data));
for(int i=1; i<=n; ++i) {
for(int j=1; j<=n; ++j) {
cin>>data[i][j];
}
}
Myinfo info;
info.x=0;
info.y=0;
s_que.push(info);
bfs();
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; ++j) {
if(data[i][j]==0) {
++ans;
}
}
}
cout<<ans<<endl;
return 0;
}
void bfs() {
while(!s_que.empty()) {
Myinfo info;
info=s_que.front();
s_que.pop();
data[info.x][info.y]=1;
for(int i=1; i<=4; ++i) {
int newx,newy;
newx=dx[i]+info.x;
newy=dy[i]+info.y;
if((newx>=0&&newx<=n+1)&&(newy>=0&&newy<=n+1)) {
if(data[newx][newy]==0) {
Myinfo info1;
info1.x=newx;
info1.y=newy;
data[newx][newy]=1;
s_que.push(info1);
}
}
}
}
}