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谢谢大佬,过了