普-疑问……

B3625 迷宫寻路

Adorable_ @ 2024-09-25 19:04:48

蒟蒻,大佬勿喷%%

#include<bits/stdc++.h>
using namespace std;

#define int long long
const int N = 1e2+5;
int dx[5] = {0,0,1,-1},
    dy[5] = {1,-1,0,0};
int n,m;
bool vis[N][N],b[N][N],c;

void dfs(int x,int y)
{
    if(x<1 or y<1 or x>n or y>m or b[x][y] or c or vis[x][y]) return;
    if(x == n and y == m)
    {
        c = 1;
        return;
    }
    vis[x][y] = 1;
    for(int i = 0;i<4;i++)
    {
        dfs(x+dx[i],y+dy[i]);
    }
    //vis[x][y] = 0;
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cin>>n>>m;
    for(int i = 1;i<=n;i++)
        for(int j = 1;j<=m;j++)
        {
            char c;
            cin>>c;
            if(c == '#') b[i][j] = 1;
        }
    dfs(1,1);
    if(c) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
    return 0;
}

这道题为什么不用回溯qwq,回溯就t了,不回溯就过了


by fqfengqi @ 2024-09-25 19:16:00

回溯会枚举每条路径在这个题目没有意义


by Sheep_YCH @ 2024-09-25 19:19:51

@Adorable_

因为这道题的做法不需要回溯,回溯没有任何意义,在for循环时就已经将周围的点拓展完了,回溯这个点没有任何意义,因为你回溯还是重新走一遍


by Adorable_ @ 2024-09-25 19:25:31

@Sheep_YCH okok谢谢大佬


by Adorable_ @ 2024-09-25 19:25:45

@fqfengqi 懂啦,感谢感谢


by AKIOI_GO @ 2024-09-27 11:41:44

帮你整理一下。

回溯:用于路径数量问题;

不回溯:用于连通块、最短路问题。 @Adorable_


|