代码如下
//#pragma GCC optimize( 2 )
#include<bits/stdc++.h>
#define MAXN 1009
#define For(i,j,k) for(int i=j;i<=k;++i)
#define dFor(i,j,k) for(int i=j;i>=k;--i)
#define ll long long
using namespace std;
int n,m,vis[MAXN][MAXN];
bool f[MAXN];
map<char,int> dx,dy;
char tmap[MAXN][MAXN];
void dfs(int x,int y,int color){
vis[x][y]=color;
int nx=x+dx[tmap[x][y]],ny=y+dy[tmap[x][y]];
if(nx<1||nx>n||ny<1||ny>m) return ;
if(tmap[nx][ny]=='o'){
f[color]=true;
return ;
}
if(vis[nx][ny]!=0){
if(f[vis[nx][ny]]==true) f[color]=true;
return ;
}
dfs(nx,ny,color);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
dx['u']=-1,dy['u']=0,dx['d']=1,dy['d']=0,dx['l']=0,dy['l']=-1,dx['r']=0,dy['r']=1;
cin>>n>>m;
For(i,1,n){
For(j,1,m){
cin>>tmap[i][j];
}
}
int now=1;
For(i,1,n){
For(j,1,m){
if(tmap[i][j]=='o') continue;
if(vis[i][j]==0){
dfs(i,j,now);
now++;
}
}
}
int ans=0;
For(i,1,n){
For(j,1,m){
if(tmap[i][j]=='o'){
ans++;
continue;
}
if(f[vis[i][j]]==true) ans++;
}
}
cout<<ans;
return 0;
}