代码
#include <bits/stdc++.h>
using namespace std;
int n,m,f=0,b[105][105],cnt[105][105];
void dfs(int x,int y){
if(f==1) return;
if(x==n&&y==m){
cout<<"Yes";
f=1;
return;
}
if(x==n&&cnt[x-1][y]==1&&cnt[x][y-1]==1&&cnt[x][y+1]==1||y==m&&cnt[x-1][y]==1&&cnt[x][y-1]==1&&cnt[x+1][y]==1||cnt[x+1][y]==1&&cnt[x][y+1]==1&&cnt[x-1][y]==1&&cnt[x][y-1]==1)
return;
if(x!=1&&cnt[x-1][y]==0&&b[x-1][y]!='#'){
cnt[x-1][y]=1;
dfs(x-1,y);
cnt[x-1][y]=0;
}
if(y!=1&&cnt[x][y-1]==0&&b[x][y-1]!='#'){
cnt[x][y-1]=1;
dfs(x,y-1);
cnt[x][y-1]=0;
}
if(x!=n&&cnt[x+1][y]==0&&b[x+1][y]!='#'){
cnt[x+1][y]=1;
dfs(x+1,y);
cnt[x+1][y]=0;
}
if(y!=m&&cnt[x][y+1]==0&&b[x][y+1]!='#'){
cnt[x][y+1]=1;
dfs(x,y+1);
cnt[x][y+1]=0;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>b[i][j];
if(b[i][j]=='#') cnt[i][j]=1;
}
}
if(b[n][m]=='#'||b[n-1][m]=='#'&&b[n][m-1]=='#'){
cout<<"No";
return 0;
}
dfs(1,1);
if(f==0) cout<<"No";
return 0;
}