#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e7+100;
int h,w,sx,sy,cnt;
int to(int x,int y){return(x-1)*w+y;}
char a[N];int fs[N];int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void dfs(int x,int y){
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx<1||ny<1||nx>h||ny>w||fs[to(nx,ny)]!=0||a[to(nx,ny)]!='.')continue;
fs[to(nx,ny)]=cnt;
dfs(nx,ny);
}
return;
}
signed main(){
cin>>h>>w;
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>a[to(i,j)];
if(a[to(i,j)]=='S')sx=i,sy=j;
}
}
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++)if(a[to(i,j)]=='.'&&fs[to(i,j)]==0){
fs[to(i,j)]=++cnt;
dfs(i,j);
}
}
if(fs[to(sx+1,sy)]==fs[to(sx-1,sy)]&&sx>1&&sx<h&&a[to(sx+1,sy)]!='#'&&a[to(sx-1,sy)]!='#'){cout<<"Yes";}
else if(fs[to(sx+1,sy)]==fs[to(sx,sy+1)]&&sy<w&&sx<h&&a[to(sx+1,sy)]!='#'&&a[to(sx,sy+1)]!='#'){cout<<"Yes";}
else if(fs[to(sx+1,sy)]==fs[to(sx,sy-1)]&&sy>1&&sx<h&&a[to(sx+1,sy)]!='#'&&a[to(sx,sy-1)]!='#'){cout<<"Yes";}
else if(fs[to(sx-1,sy)]==fs[to(sx,sy+1)]&&sx>1&&sy<w&&a[to(sx-1,sy)]!='#'&&a[to(sx,sy+1)]!='#'){cout<<"Yes";}
else if(fs[to(sx-1,sy)]==fs[to(sx,sy-1)]&&sx>1&&sx>1&&a[to(sx-1,sy)]!='#'&&a[to(sx,sy-1)]!='#'){cout<<"Yes";}
else if(fs[to(sx,sy-1)]==fs[to(sx,sy+1)]&&sy<w&&sy>1&&a[to(sx,sy)]!='#'&&a[to(sx,sy+1)]!='#'){cout<<"Yes";}
else cout<<"No";
return 0;
}
直接深搜的,有 2 个点RE了求助