TLEaaa

B3625 迷宫寻路

glass_goldfish @ 2024-06-16 17:05:39

#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[101][101];
bool v[101][101];
bool dfs(int x,int y)
{
    if(x<1||y<1||x>n||y>n||a[x][y]=='#'||v[x][y])return 0;
    else if(x==n&&y==m)return 1;
    v[x][y]=1;
    bool k=dfs(x+1,y)||dfs(x-1,y)||dfs(x,y+1)||dfs(x,y-1);
    v[x][y]=0;
    return k;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        cin>>a[i][j];
    if(dfs(1,1))cout<<"Yes";
    else cout<<"No";
    return 0;
}

by kexun_kevin @ 2024-06-16 17:13:30

@liulijinyu

这题不用回溯,因为它不是最短路,所以无论是怎么走到这的都无所谓,回溯了反而会计算多次,浪费时间。


by glass_goldfish @ 2024-06-16 17:17:17

@kexun_kevin so,,该怎么写


by kexun_kevin @ 2024-06-16 17:19:25

@liulijinyu

你不会不知道回溯是啥吧(那你咋写出来的),就是

v[x][y] = 0;

去掉就行了


by glass_goldfish @ 2024-06-16 17:21:02

@kexun_kevin 50,WA


by glass_goldfish @ 2024-06-16 17:21:44

@kexun_kevin 样例都没过


by kexun_kevin @ 2024-06-16 17:22:35

@liulijinyu

哦对,你判越界的时候 y<m 写成 y<n 了,把这个改了应该就行了


by glass_goldfish @ 2024-06-16 17:24:48

@kexun_kevin AC了,感谢! abcd


by xutengyuan2012 @ 2024-07-01 22:51:16

@kexun_kevin 我也是这个问题,现在AC了,谢谢大佬!


|