zyabc @ 2022-09-08 08:57:20
如题,代码没看出来又什么问题,可是只有50分
#include<bits/stdc++.h>
using namespace std;
int n,m;
char mg[105][105];
int dx[4]={0,-1,0,1},dy[4]={1,0,-1,0},vis[105][105];
bool toDest=0;
void dfs(int x,int y){
if(x==n&&y==m) {cout<<"Yes";toDest=1; return;}
vis[x][y]=1;
for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&mg[nx][ny]!='#'&&vis[nx][ny]==0)
{
dfs(nx,ny);
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cin>>mg[i][j];
}
dfs(1,1);
if(!toDest) cout<<"No";
return 0;
}
by Z_X_D_ @ 2022-09-08 09:17:21
@zyabc 可能不是唯一路经,所以可能重复输出“Yes”
#include<bits/stdc++.h>
using namespace std;
int n,m;
char mg[105][105];
int dx[4]={0,-1,0,1},dy[4]={1,0,-1,0},vis[105][105];
bool toDest=0;
void dfs(int x,int y){
if(x==n&&y==m&&!toDest) {cout<<"Yes";toDest=1; return;}
vis[x][y]=1;
for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&mg[nx][ny]!='#'&&!vis[nx][ny])
dfs(nx,ny);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cin>>mg[i][j];
}
dfs(1,1);
if(!toDest) cout<<"No";
return 0;
}
by zyabc @ 2022-09-08 13:02:17
@Z_XD 多谢,修改了输出位置,AC了。