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_