【题目描述】
编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在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
【题目分析】
从长方形4边上每个点出发,向周围扩散为标记符‘-’;最后剩余的0则是面积
【参考代码】
#include<bits/stdc++.h>
using namespace std;
char a[11][11];
void mya(int x,int y) {
if(a[x][y]=='1'||a[x][y]=='-')
return ;
a[x][y]='-';
while(true) {
bool f=false;//标记是否还在往周围扩散
for(int i=1; i<=10; i++) {
for(int j=1; j<=10; j++) {
if(a[i][j]=='-') {
if(a[i][j+1]!='1'&&a[i][j+1]!='-')
a[i][j+1]='-',f=true;
if(a[i][j-1]!='1'&&a[i][j-1]!='-')
a[i][j-1]='-',f=true;
if(a[i+1][j]!='1'&&a[i+1][j]!='-')
a[i+1][j]='-',f=true;
if(a[i-1][j]!='1'&&a[i-1][j]!='-')
a[i-1][j]='-',f=true;
}
}
}
if(f==false)
return ;
}
}
int main() {
for(int i=1; i<=10; i++)
for(int j=1; j<=10; j++)
cin>>a[i][j];
for(int i=1; i<=10; i++)
mya(1,i);
for(int i=1; i<=10; i++)
mya(10,i);
for(int i=1; i<=10; i++)
mya(i,1);
for(int i=1; i<=10; i++)
mya(i,10);
int sum=0;
/*for(int i=1; i<=10; i++) {
for(int j=1; j<=10; j++)
cout<<a[i][j]<<' ';;
cout<<endl;
}*/
for(int i=1; i<=10; i++) //统计剩余的0
for(int j=1; j<=10; j++)
if(a[i][j]=='0')
sum++;
cout<<sum<<endl;
return 0;
}