DFS:
#include<bits/stdc++.h>
using namespace std;
bool io=0;
char mp[110][110];
int n,m,dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0};
bool ext(int ex,int ey){
if(ex<1&&ex>n&&ey<1&&ey>m) return 0;
return 1;
}
void dfs(int x,int y){
if(x==n&&y==m){
io=1;
return ;
}
for(int i=1;i<=4;i++){
int wx=x+dx[i],wy=y+dy[i];
if(ext(wx,wy)&&mp[wx][wy]=='.'){
mp[wx][wy]='#';
dfs(wx,wy);
mp[wx][wy]='.';
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
dfs(1,1);
if(io==1) cout<<"Yes";
else cout<<"No";
return 0;
}
BFS:
#include<bits/stdc++.h>
using namespace std;
bool io=0;
char mp[110][110];
int n,m,dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0};
struct Pos{int x,y;};
bool ext(int ex,int ey){
if(ex<1&&ex>n&&ey<1&&ey>m) return 0;
return 1;
}
void bfs(){
queue<Pos> que;
Pos fp; fp.x=1,fp.y=1;
que.push(fp);
while(!que.empty()){
Pos np=que.front();
que.pop();
if(np.x==n&&np.y==m){
io=1;
return ;
}
for(int i=1;i<=4;i++){
int wx=np.x+dx[i],wy=np.y+dy[i];
if(ext(wx,wy)&&mp[wx][wy]=='.'){
mp[np.x][np.y]='#';
Pos wp; wp.x=wx,wp.y=wy;
que.push(wp);
mp[np.x][np.y]='.';
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
bfs();
if(io==1) cout<<"Yes";
else cout<<"No";
return 0;
}