30pts全输出0求助

P1605 迷宫

@[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


|