dfs超时

B3625 迷宫寻路

mope @ 2024-02-02 13:22:24

#include<iostream>
using namespace std;
int n,m,flag=0;
int a[105][105],v[105][105];
int dx[4]={0,-1,0,1},dy[4]={1,0,-1,0};
void dfs(int p,int q){
    if(p==n&&q==m) flag=1;
    if(flag==1) return;
    for(int i=0;i<4;i++){
        int tx=p+dx[i],ty=q+dy[i];
        if(a[tx][ty]==1&&v[tx][ty]==0){
            v[tx][ty]=1;
            dfs(tx,ty);
            v[tx][ty]=0;
        }   
    }
}
int main(){
    char c;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            cin>>c;
            if(c=='.') a[i][j]=1;
        }
    v[1][1]=1;
    dfs(1,1);
    if(flag) cout<<"Yes";
    else cout<<"No";    
}

by kexun_kevin @ 2024-02-04 16:39:04

这题不用回溯,去掉

v[tx][ty]=0;

|