emm……
本蒟蒻其实没怎么看懂你的代码,但是可以给你提几个建议?
1. 出界和b数组可以省去,如果我没有理解错的话,你的b数组应该是记录每个点是否被走过的吧,有些情况其实需要反复的走一遍格子,比如说:
```
6 6
2 0 0 0 0 0
1 0 0 0 0 0
1 0 0 0 0 0
1 1 4 0 0 0
1 0 0 0 0 0
1 4 1 1 1 3
```
这组样例中就要反复地走某一些格子
判断越界地话其实和判断障碍一起就行了,因为你数组定义全局的话会初始化为0,而障碍也是0,所以不用额外判越界
2. 你的bfs不太像bfs?好像你并没有搜索的过程。bfs是依靠队列来实现的一个算法。像这是我对于本题写的bfs的主体部分,可够参考
```
q.push((node){bx,by,0,6});
while(q.size()){
node frt=q.front();
q.pop();
if(a[frt.x][frt.y]==3){
cout<<frt.step;
return 0;
}
for(int i=0;i<4;i++){
int dx=frt.x+fx[i],dy=frt.y+fy[i];
if(frt.bld>1 && a[dx][dy]!=0){
if(a[dx][dy]==4) q.push((node){dx,dy,frt.step+1,6});
else q.push((node){dx,dy,frt.step+1,frt.bld-1});
}
}
}
```
by Infinity_Fantasy @ 2023-08-21 21:10:11
代码粘上来格式乱了,不好意思哈
by Infinity_Fantasy @ 2023-08-21 21:11:26
谢谢,过了
by 20100518hyc @ 2023-08-24 20:51:02