如果你也DFS TLE 9个点,删一行代码解决

B3625 迷宫寻路

Chengjintian @ 2023-04-09 22:22:00

我的原TLE代码:

#include <bits/stdc++.h>
using namespace std;
int n,m,temp,tx,ty;
int dx[12]={1,0,0,-1};
int dy[12]={0,1,-1,0};
bool ans;
char t[1145][1145];
bool used[114][114];
bool cheak(int x,int y){
    if(x>n or x<1 or y>m or y<1)return true;
    return false;
}
void mg(){
    if (tx==n and ty==m){
        ans=true;
        return ;
    }
    if(cheak(tx,ty))return ;

    for(int i=0;i<=3;i++){
        tx+=dx[i];
        ty+=dy[i];
        if(!used[tx][ty] and t[tx][ty]=='.'){
            used[tx][ty]=true;
            mg();
            used[tx][ty]=false;
        }
        tx-=dx[i];
        ty-=dy[i];
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        cin>>t[i][j];
    tx=1,ty=1;
    mg();
    if(ans)cout<<"Yes";
    else cout<<"No";
    return 0;
}

只要把回溯,也就是 “used[tx][ty]=false;”删了就A了

我也不到为什么


by Ruiqun2009 @ 2023-04-09 22:50:26

@yzyhxhd backtracing not needed.


by Chengjintian @ 2023-04-11 23:04:17

@Ruiqun2009

一只野生dalao!(喜

收下我的膝盖》》


by willix @ 2023-04-19 18:17:31

@yzyhxhd 因为回溯之后清空该访问点记录会导致一直卡在某一个点不停回溯、访问,然后就TLE了


by Chengjintian @ 2023-04-19 19:29:28

@willix

谢谢捏


|