50分求助

B3625 迷宫寻路

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了。


|