10分求助大佬

B3625 迷宫寻路

TEMPLATES @ 2024-07-11 22:13:40

#include<bits/stdc++.h>
using namespace std;
int T[150][150],n,m;
bool b=false;
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
char mp[150][150];
void dfs(int x,int y){
    if(x==n && y==m){
        b=true;
        exit(0);
    }
    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&&mp[nx][ny]=='.'&&T[nx][ny]==0){
            T[nx][ny]=1;
            dfs(nx,ny);
            T[nx][ny]=0;
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>mp[i][j];
        }
    }
    T[1][1]=1;
    dfs(1,1);
    if(b){cout<<"Yes";}
    else cout<<"No";
    return 0;
}

by blue_mood @ 2024-07-11 22:27:49

@China_one 把那个exit(0)删掉,并且把恢复现场T[nx][ny]=0;删掉就可以了,如果加上回溯的过程会超时


by blue_mood @ 2024-07-11 22:33:08

补充一下,如果直接exit(0)的话是直接退出整个文件,如果你到不了(n,m)的话就不会exit(0),就会输出No,如果可以到达(n,m)就直接退出文件了,不会输出Yes,你也可以直接在exit(0)前面加一个输出Yes


by TEMPLATES @ 2024-07-13 13:48:39

收到!已关


by TEMPLATES @ 2024-07-13 13:51:33

AC了,谢谢大佬Orz


|