面积
题目描述
一幅图由0和×组成,编程计算由“×”号所围成的图形的面积。面积的计算方法是统计×号所围成的闭合曲线中0的数目。
输入输出格式
输入格式:
由0,×组成的图(最多10行,每行不超过200个字符)。
输出格式:
一行,一个整数,为面积数。
输入输出样例
输入样例:
000000000
0000**000
000*00*00
00*000*00
000***000
000000000
输出样例:
View Code
5
思路:遍历图周围,如找到'0'则沿上下左右,找寻连在一起的,标记。最后统计未被标记的个数。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//程序名:新的C++程序 //作者: #include<iostream> #include<fstream> #include<algorithm> using namespace std; string c; int a[11][201],b[11][201],n,m,e,z,y,ans; void dfs(int w,int x) { if(!a[w-1][x]&&w-1>0){a[w-1][x]=2;dfs(w-1,x);} if(!a[w][x-1]&&x-1>0){a[w][x-1]=2;dfs(w,x-1);} if(!a[w+1][x]&&w+1<=z){a[w+1][x]=2;dfs(w+1,x);} if(!a[w][x+1]&&x+1<=y){a[w][x+1]=2;dfs(w,x+1);} return; } void printf() { for(int i=1;i<=z;i++) { for(int j=1;j<=y;j++)cout<<a[i][j]<<" "; cout<<endl; } cout<<endl; } int main() { while(cin>>c) { z++;y=0; for(int i=0;i<c.size();i++) { if(c[i]=='0')a[z][++y]=0; else a[z][++y]=1; } } for(int i=1;i<=z;i++) { for(int j=1;j<=y;j++) { if(i>1&&i<z&&j>1&&j<y)continue; if(a[i][j]==0)a[i][j]=1,dfs(i,j); //printf(); } } for(int i=1;i<=z;i++) for(int j=1;j<=y;j++)if(a[i][j]==0)ans++; cout<<ans; return 0; }