24 分那位大佬可以求助一下

P2802 回家

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


|