我有一个用 0 和 1 填充的二进制矩阵 (N*M)。示例:
(S, 1, 1, 1, 0)
(1, 0, 0, 0, 1)
(1, 1, 0, 0, 1)
(1, 0, 1, 1, D)
起点 S 是左上角,目的地 D 是右下角。从 S 开始,允许执行以下步骤:
- 下降 1 级 (↓)
- 向右走 1 步 (→)
- 向右和向下对角线 1 步(➘)
但只能使用带有“1”的条目,因为“0”代表障碍。因此,例如在我的示例矩阵中,有三种可能的路径。
(S, 1, 1, 1, ) (S, , , , ) (S, , , , )
( , , , , 1) (1, , , , ) (1, , , , )
( , , , , 1) ( , 1, , , ) (1, 1, , , )
( , , , , D) ( , , 1, 1, D) ( , , 1, 1, D)
目标:我正在寻找的是确定是否存在路径的最有效算法。该算法只需要在上述限制下输出 TRUE(如果至少存在一条从 S 到 D 的路径)和 FALSE(如果不存在从 S 到 D 的路径)。它不需要确定最短路径。仅是否存在满足条件的路径。
我研究过 DFS 和 BFS,但我不确定它们是否对我的问题最有效。