有一条“封闭”曲线划定的地图,界定曲线上的点有“1“表示,曲线内外的点用“0”表示(具体数据由另文件提供)。
试实施图形点扫描,统计地图的面积即“封闭”曲线内“0”点数。
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int n,m; int ans[15][15]; void in_put() { //memset(ans,-1,sizeof(ans)); scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) scanf("%d",&ans[i][j]); } void out_put() { int cnt=0; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(!ans[i][j]) cnt++; printf("%d ",cnt); } void dfs(int c,int v) { if((c<=n&&c>=1)&&(v>=1&&v<=n)&&!ans[c][v]) { ans[c][v]=-1; dfs(c-1,v);dfs(c+1,v); dfs(c,v+1);dfs(c,v-1); } } void solve() { in_put(); for(int i=1;i<=n;++i) for(int j=1;j<=m;j++){ if(i==1||j==m||j==1||i==n){ if(!ans[i][j]) {ans[i][j]=-1; dfs(i-1,j); dfs(i+1,j); dfs(i,j+1); dfs(i,j-1);} } } } int main() { //freopen("case.txt","r",stdin); int t=2; while(t--){ solve(); out_put(); for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j) printf("%d ",ans[i][j]); printf(" ");} } return 0; }