RT,不知道哪里锅了
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
string a[1005];
int ma[1005][1005];
int x[1005],y[1005],p;
map<char,pair<int,int> > v;
void dfs(int X,int Y){
if(X < 1 || Y < 1 || X > n || Y > m || ma[X][Y] == 1)return;
if(ma[X + v[a[X][Y]].first][Y + v[a[X][Y]].second] == 0)return;
if(ma[X][Y] == 0)ans++;
ma[X][Y] = 1;
dfs(X + 1,Y);
dfs(X,Y + 1);
dfs(X - 1,Y);
dfs(X,Y - 1);
}
int main(){
v['u'] = make_pair(-1,0);//上
v['d'] = make_pair(1,0);//下
v['l'] = make_pair(0,-1);//左
v['r'] = make_pair(0,1);//右
cin>>n>>m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin>>a[i][j];
if(a[i][j] == 'o')x[++p] = i,y[p] = j;
}
}
ans += p;
for(int i = 1; i <= p; i++){
int xx = x[i],yy = y[i];
ma[xx][yy] = 1;
dfs(xx + 1,yy);
dfs(xx,yy + 1);
dfs(xx - 1,yy);
dfs(xx,yy - 1);
}
cout<<ans;
return 0;
}