代码如下:
#include<iostream>
using namespace std;
char a[1005][1005];
int bj[1005][1005];
int n,m;
int flag=0;
bool cmp(){
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(bj[i][j]==0&&a[i][j]=='.')
return true;
cout<<"NO";
flag=1;
return false;
}
int dfs(int x,int y) {
bj[x][y]=1;
if(x==n&&y==m){
cout<<"Yes";
flag=1;
return 0;
}
if(cmp()==false)
return 0;
if(a[x+1][y]=='.'&&bj[x+1][y]==0)
if(dfs(x+1,y)==0)
return 0;
if(a[x][y+1]=='.'&&bj[x][y+1]==0)
if(dfs(x,y+1)==0)
return 0;
if(a[x-1][y]=='.'&&bj[x-1][y]==0)
if(dfs(x-1,y)==0)
return 0;
if(a[x][y-1]=='.'&&bj[x][y-1]==0)
if(dfs(x,y-1)==0)
return 0;
return 1;
}
int main() {
cin>>n>>m;
a[1][1]=1;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
cin>>a[i][j];
if(a[1][1]=='#'||a[n][m]=='#'){
printf("No");
return 0;
}
dfs(1,1);
if(flag==0)
cout<<"NO";
return 0;
}