@[caijianhong](/user/390033)
当你在走到下一个点之前,您就把那个点标记了 `visit[tempx][tempy]=1;`
然后呢,当你dfs到那个点之后,由于该点已被标记,所以 `if(visit[x][y]) return ;` 这条语句就直接结束了你的dfs,从而输出0
建议将dfs部分改成
```cpp
void dfs(int x,int y){
if(x==edx&&y==edy){
ans++;//到终点回头
return ;
}
for(int i=0;i<4;i++){
int tempx=x+dbx[i],tempy=y+dby[i];
if(visit[tempx][tempy])continue;
if(qiang[tempx][tempy])continue;
visit[tempx][tempy]=1;//回溯
dfs(tempx,tempy);
visit[tempx][tempy]=0;
}
}
```
by Priori_Incantatem @ 2021-01-06 18:41:34
还有在题目版里捞帖不太好,建议在学术版里捞
by Priori_Incantatem @ 2021-01-06 18:43:41
@[Priori_Incantatem](/user/120362) thx
by _caiji_ @ 2021-01-06 18:45:52
@[caijianhong](/user/390033) 不好意思,我这个dfs写假了
这样写会导致起点没被标记,从而重复访问起点
应该是这样
```cpp
void dfs(int x,int y){
if(x==edx&&y==edy){
ans++;//到终点回头
return ;
}
visit[x][y]=1;
for(int i=0;i<4;i++){
int tempx=x+dbx[i],tempy=y+dby[i];
if(visit[tempx][tempy])continue;
if(qiang[tempx][tempy])continue;
dfs(tempx,tempy);
}
visit[x][y]=0;
}
```
by Priori_Incantatem @ 2021-01-06 18:59:08
@[Priori_Incantatem](/user/120362) 我在外面写了`visit[stx][sty]=1`,现在已经ac了,谢谢大佬
by _caiji_ @ 2021-01-06 19:15:54