问题 B: 面积
时间限制: 1 Sec 内存限制: 128 MB
[提交] [状态]
题目描述
一幅图由0和组成,编程计算由“”号所围成的图形的面积。面积的计算方法是统计号所围成的闭合曲线中0的数目。
输入
由0,组成的图
输出
面积数
样例输入 Copy
000000000
0000**000
0000000
0000000
000***000
000000000
样例输出 Copy
5
#include <iostream>
#include <cstdio>
#include <queue>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int M = 100005;
int n,m;
char mp[100][100];
bool vis[100][100];
int nex[4][2] = {0,1,0,-1,1,0,-1,0};
void dfs(int x,int y){
for(int i=0; i<4; i++){
int xx = x + nex[i][0];
int yy = y + nex[i][1];
if(xx>=0 && xx<n && yy>=0 && yy<m && !vis[xx][yy] && mp[xx][yy]=='0'){
vis[xx][yy]=1;
dfs(xx,yy);
}
}
}
int main()
{
n=0;
while(~scanf("%s",mp[n])){
n++;
}
m = strlen(mp[0]);
// cout << n << m;
memset(vis,0,sizeof(vis));
for(int i=0; i<n; i++)
for(int j=0; j<m; j++){
if((i==0 || i==n-1 || j==0 || j==m-1) && mp[i][j]=='0'){
vis[i][j] = 1;
dfs(i,j);
}
}
int ans = 0;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(mp[i][j]=='0' && !vis[i][j]) ans++;
cout << ans << endl;
return 0;
}
if((I = = 0 || I= =n-1 || j= =0 || j= =m-1) && mp[i][j]= =‘0’)
思路:围着最外层四条边扫一圈,最后统计没有被标记过的
注意:没有给定几行几列,需要自己求