作为一名爱坤dfs就必须会
#include<bits/stdc++.h>
using namespace std;
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1},l,r,n,m;
string s;
char a[1000][1000];
bool vis[100][100];
int ans=0;
void dfs(int x,int y){
if(x==l&&y==r){
ans=1;
return;
}
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx<1||nx>n||ny<1||ny>m) continue;
//cout<<x<<" "<<y<<" "<<nx<<" "<<ny<<" "<<vis[nx][ny]<<endl;
if(vis[nx][ny]==0&&a[nx][ny]=='.'||a[nx][ny]=='S'){
vis[nx][ny]=1;
//cout<<"1"<<endl;
//cout<<"1 "<<x<<" "<<y<<" "<<nx<<" "<<ny<<" "<<vis[nx][ny]<<endl;
dfs(nx,ny);
vis[nx][ny]=0;
//cout<<2<<endl;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=1;j<=m;j++){
a[i][j]=s[j-1];
//cout<<a[i][j]<<" ";
if(a[i][j]=='S'){
l=i;r=j;
}
}
//cout<<endl;
}
//cout<<l<<" "<<r<<endl;
dfs(1,1);
if(ans==1){
cout<<"YES";
}else{
cout<<"NO";
}
return 0;
}