@[QAQ_juruo](/user/1098781) 我翻了翻讨论版看到[这个](https://www.luogu.com.cn/discuss/736927)
粗略看了下,看起来您既没有标记起点已访问,也没有验证终点是否为障碍物
by Shen_Linwood @ 2024-01-11 18:12:56
@[Shen_Linwood](/user/480444)
```
int main(){
cin>>n>>m>>t;
cin>>sx>>sy>>fx>>fy;
cric(1,t){
int x,y;
cin>>x>>y;
dt[x][y]=0;
}
bj[sx][sy]=1;//this
dfs(sx,sy);
cout<<ans;
return 0;
}
```
但是验证终点是否为障碍物具体怎么写QAQ
by QAQ_juruo @ 2024-01-12 12:58:35
@[QAQ_juruo](/user/1098781) 很好写,只要在开头特判一下 `dt[fx][fy]` 是否为 0,输出 0 即可
by Shen_Linwood @ 2024-01-12 15:51:23
当然也有可能是别的问题(?
我要去上文化课了,有空再看(
by Shen_Linwood @ 2024-01-12 15:52:34
@[Shen_Linwood](/user/480444)
```#include<iostream>
#define cric(a,b) for(int i=(a);i<=(b);i++)
using namespace std;
long long dt[11][11]={1},ans;
bool bj[11][11]={0};
int n,m,t,sx,sy,fx,fy;
void dfs(int x,int y){
bj[sx][sy]=1;//起点标记
if(x==fx&&y==fy){
ans++;
return;
}
if(bj[x+1][y]==0&&dt[x+1][y]){
bj[x][y]=1;
dfs(x+1,y);
bj[x][y]=0;
}
if(bj[x-1][y]==0&&dt[x-1][y]){
bj[x][y]=1;
dfs(x-1,y);
bj[x][y]=0;
}
if(bj[x][y+1]==0&&dt[x][y+1]){
bj[x][y]=1;
dfs(x,y+1);
bj[x][y]=0;
}
if(bj[x][y-1]==0&&dt[x][y-1]){
bj[x][y]=1;
dfs(x,y-1);
bj[x][y]=0;
}
}
int main(){
cin>>n>>m>>t;
cin>>sx>>sy>>fx>>fy;
cric(1,t){
int x,y;
cin>>x>>y;
dt[x][y]=1;
}
bj[sx][sy]=1;
dfs(sx,sy);
if(dt[fx][fy]==0)cout<<0;
else cout<<ans;
return 0;
}
```
为什么还是30(?
by QAQ_juruo @ 2024-01-12 18:02:59
啊这…… 那就麻烦了
我看看
by Shen_Linwood @ 2024-01-12 19:16:35
@[QAQ_juruo](/user/1098781) 调了一下,您没写边界判断,就是说会搜到迷宫的外面去
by Shen_Linwood @ 2024-01-12 20:03:04
还有,`dt[11][11]={1}` 只将 `dt[0][0]` 赋值为 1,其他都还是 0
简单的修改方法是反过来,初始为 0,用 1 表示障碍;如果一定要初始为 1,可以用 `memset()` 或者 for 循环
by Shen_Linwood @ 2024-01-12 20:07:10
然后,边界判断的写法类似这样
``` cpp
bool check(int x,int y){
return x>0&&x<=n&&y>0&&y<=m;
}
```
by Shen_Linwood @ 2024-01-12 20:11:30