#include <bits/stdc++.h>/*题目描述 指挥部被突来的洪水淹没了,还好指挥部有在某些重要的地方起一些围墙,用*号表示,而一个封闭的*号区域洪水是进不去的……现在给出指挥部的围墙建设图,问指挥部没被淹到的重要区域(由"0"表示)有多少。 输入 第一行是两个数,x和y(x,y<=500) 第二行及以下是一个由*和0组成的x*y的图。 输出 输出没被水淹没的指挥部的“0”的数量(计算被*围住的0的个数)。*/ using namespace std; int n,m,fx[4]={0,0,1,-1},fy[4]={-1,1,0,0},sum=0; char a[501][501]; void dfs(int x,int y){ a[x][y]='k'; for(int h=0;h<4;h++){ int tx=x+fx[h]; int ty=y+fy[h]; if(tx<=n&&tx>=1&&ty<=m&&ty>=1&&a[tx][ty]=='0'){ dfs(tx,ty); } } } int main(){ cin>>n>>m; for(int j=1;j<=n;j++){ for(int k=1;k<=m;k++)cin>>a[j][k]; } for(int j=1;j<=n;j++){ for(int k=1;k<=m;k++){ if((j>1&&j<n)&&(k>1&&k<m)||a[j][k]=='*')continue; dfs(j,k); } } for(int j=1;j<=n;j++){ for(int k=1;k<=m;k++){ if(a[j][k]=='0')sum++; } } cout<<sum; return 0; } /************************************************************** Problem: 1913 User: zhouhongyi Language: C++ Result: Accepted Time:23 ms Memory:2320 kb ****************************************************************/