t题目是一个简单的DFS,但是他让计算的是周长,而不是面积,所以我们在找到目标物X后要对X的四周寻找if(mapp[nx][ny]==’.’) k++;来确定目标物X的周长,从而确定连通块总的周长
#includeusing namespace std; const int N = 30; char mapp[N][N]; int flag[N][N]; int n,m; int dx[8]={-1,0,0,1,-1,-1,1,1},dy[8]={0,-1,1,0,-1,1,-1,1}; int step; int move(int x1,int y1) { int k= 0; for(int i=0;i<4;i++) { int nx = x1 + dx[i]; int ny = y1 + dy[i]; if(mapp[nx][ny]=='.') k++; } return k; } void dfs(int x,int y) { flag[x][y] = 1; for(int i=0;i<8;i++) { int nx = x + dx[i]; int ny = y + dy[i]; if(nx>=1&&ny>=1&&nx<=n&&ny<=m&& !flag[nx][ny]&&mapp[nx][ny]=='X') { step += move(nx,ny); flag[nx][ny] = 1; dfs(nx,ny); } } } int main() { int x,y; cin>>n>>m>>x>>y; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>mapp[i][j]; for(int i=0;i<=n+1;i++) { mapp[i][0] = '.'; mapp[i][m+1] = '.'; } for(int i=0;i<=m+1;i++) { mapp[0][i] = '.'; mapp[n+1][i] = '.'; } step = move(x,y); dfs(x,y); cout<



