为什么我的史山代码过不去

B3625 迷宫寻路

liugang_cn @ 2024-11-17 21:23:03

代码:

#include<bits/stdc++.h>
using namespace std;
char a[10005][10005];
int n,m;
bool flag=false;
void dfs(int x,int y){
    if(!flag){
        if(x==n&&y==m) flag=true;
        a[x][y]='#';
        if(a[x][y+1]=='.')
        dfs(x,y+1);
        if(a[x][y-1]=='.')
        dfs(x,y-1);
        if(a[x+1][y]=='.')
        dfs(x+1,y);
        if(a[x-1][y]=='.')
        dfs(x-1,y);
        a[x][y]='.';
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++) cin>>a[i][j];
    dfs(1,1);
    if(flag) cout<<"Yes";
    else cout<<"No";
}

测评: (https://www.luogu.com.cn/record/189521638)


by meifan666 @ 2024-11-17 21:33:04

@liugang_cn来回走导致的死循环,用vis数组标记一下


by 帝都_henry26268 @ 2024-11-17 21:33:46

@liugang_cn

你这肯定过不去啊,你检查了有没有在n,m的地图方位内吗?这你样例能过?


by csb0118 @ 2024-11-17 21:36:09

@liugang_cn每个点只要走一次,你在dfs里面吧a[x][y]设为“#”后就不用改回来了


by csb0118 @ 2024-11-17 21:37:54

@liugang_cn还有就是当你走到终点时其实就可以退出dfs了,可以快一点。


by csb0118 @ 2024-11-17 21:40:08

@帝都_henry26268只有在地图里a[x][y]才可能是“.”,这里没有影响。


by liugang_cn @ 2024-11-18 13:12:36

@csb0118谢谢大佬,过了


|