@[chair0114](/user/908638)
其实特判的做法没有问题,有问题的是你的特判(有点绕哈)
你的 bfs 的做法我看懂了,你将用 $0$ 步可到达的地方视为不可到达,这个想法是没错的。但是,这句特判:
```cpp
if(s[i][j]==0&&i!=q&&j!=p)
```
是错误的。
首先,你想判断的是,当前遍历的不是起点且 $s$ 数组为 $0$。但是,起点的判断错误。若 $q = p = 1$ 且 $i = 1, j = 2, s_i,_j = 0$ 时,自己可以想到,仍然无法进入判断语句。这时输出就会错误。
因此把特判改为:
```cpp
if (s[i][j] == 0 && !(i == q && j == p))
```
或:
```cpp
if (s[i][j] == 0 && (i != q || j != p))
```
注意操作符运算级。
不知道我在你发的上一篇帖子后面补充的格式内容你看了没有,说实话,中国是因为文革导致信息技术在细节又不起眼的地方做得很差。老外的代码都是会打空格的(连 @[kkksc03](/user/1) 的《深基》里都打了空格,我看的大约 $20$ 余本外国编程书里都打了空格)。空格能有效增加代码可读性。
给你几个网站:
[网站 1(要往下翻)](https://www.zhihu.com/question/398008181/answer/2863824065)
[网站 2(百度文库)](https://wenku.baidu.com/view/929c8f4f3269a45177232f60ddccda38366be179.html?_wkts_=1689687728512&bdQuery=%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BB%A3%E7%A0%81%E8%A6%81%E5%8A%A0%E7%A9%BA%E6%A0%BC)
[网站 3(有点长)](https://www.yzktw.com.cn/post/157083.html)
[网站 4(耐心看完,因为它是以反衬形式写得)](https://blog.csdn.net/qing_gee/article/details/106800568)
by CleanIce @ 2023-07-18 21:44:55
@[CleanIce](/user/821660)
简单来说就是方法想对了,但是程序写错了
by dmx7u19x @ 2023-07-26 19:47:35