你的这份代码整体思路是对的,但存在两个实质性 bug,导致输出不正确:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
❌ BUG 1:输出循环范围写错了(少输出一行、一列)
你现在写的是:
应该是:
因为题目要求输出的是从 1..n 的整个方阵。
你少输出了最后一行 & 最后一列,导致测试样例都不可能匹配。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
❌ BUG 2:DFS 越界判断顺序错误(可能访问越界内存)
你现在写的是:
注意:你先访问了 a[nx][ny],再判断 nx、ny 是否越界!
如果 nx, ny 本来越界,那么 a[nx][ny] 就会直接造成 越界访问 → 未定义行为(可能崩溃、可能奇怪结果)
应该先判断坐标是否合法,再访问数组:
✔ 正确写法:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
❌ BUG 3:没有处理“已访问过的点”
你虽然用 -1 标记,但逻辑里没有避免二次 DFS:
也就是说,当 a[nx][ny] == -1 时:
* a[nx][ny] == 1 是 false
* 越界也 false
* 整个条件变成 true
→ 会继续 DFS,导致重复访问、爆栈可能性增大(虽然通常不会死循环,但浪费递归)
应该明确排除: