双栈法搜索节点间任意路径学习

在搜索图中任意两个节点之间的路径时,递归算法很容易爆栈,这时就需要双栈算法

算法

设置两个栈,主栈(A)用于存放单个节点,辅栈(B)用于存放节点列表,和主栈长度一致

  1. 将起始节点v0放入A,v0的相邻节点列表放入B
  2. 查看B,取出栈顶列表,取出其中第一个节点v1压入A,剩下的压回B
  3. 查看v1的节点列表,如果其中包含已经在A中的节点,则丢弃,剩下的作为节点列表压入B
  4. 继续2,直到B栈顶压入了新的空列表(即并非取出其中的节点后变空,而是A的栈顶节点相邻节点列表为空)或B栈顶压入了目标节点
    1. 如果找到了目标节点,则A中节点就是一条路径
    2. 如果B栈顶为空,则寻找路径失败,A和B同时弹出元素,继续2

代码实现查看参考1

奇思妙想

利用广度优先搜索,每个节点入队前都记录自己的上一个节点,并且带有相同上一个节点的同一节点只能出现一次,应该也可以?

参考

https://evilpan.com/2022/11/04/path-finder/

https://blog.csdn.net/abcbocheng/article/details/101102181