Little_Fox_Fairy @ 2023-07-23 14:09:25
这是代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int fx[5]={0,0,0,1,-1},fy[5]={0,1,-1,0,0};
char a[101][101];
bool vis[101][101];
void dfs(int x,int y)
{
if (x==n&&y==m)
{
cout<<"Yes";
exit(0);
}
for (int i=1;i<=4;i++)
{
int dx=fx[i]+x;
int dy=fy[i]+y;
if (dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]&&a[dx][dy]!='#')
{
vis[dx][dy]=1;
dfs(dx,dy);
vis[dx][dy]=0;
}
}
return ;
}
int main()
{
ios::sync_with_stdio(0);
cin>>n>>m;
for (int i=1;i<=n;i++)
{
string s;
cin>>s;
for (int j=1;j<=m;j++)
a[i][j]=s[j-1];
}
vis[1][1]=1;
dfs(1,1);
cout<<"No";
return 0;
}
用 bfs AC了,但 dfs 为什么会超时呢?
by xiaoyang111 @ 2023-07-25 10:54:29
我也不知道当时老师教我是不是漏写一个回溯,我到后面查了一下要回溯成开始形态,我记得老师写代码的时候没加回溯啊,普通dfs是要写回溯的,但是在这里可以不写回溯,因为这个点true
的话之前是走过了不能走(因为回溯回来了嘛),顺便改正一下之前的错误,并不是更优路线,在bfs中是更优路线(除非用优先队列的可能),在dfs中相当于这一个点走不到终点
by xiaoyang111 @ 2023-07-25 10:55:28
我个人一般喜欢用bfs,因为bfs好理解。
by xiaoyang111 @ 2023-07-25 11:06:28
回溯超时了,没办法了QAQ但是在做其他题的时候别忘了回溯,这个题感觉哪里怪怪的有点特殊
by _xm_ @ 2023-07-29 08:57:33
@xiaoyang111 编译器会处理,这种赋值常量(0,1)都会在编译的时候转换,不会影响速度。
by xiaoyang111 @ 2023-07-29 12:49:21
那就是回溯的问题了(正常是要回溯啊?)