python实现深度优先搜索_python中的深度优先搜索算法

假设我有一个函数,它接受一个输入($x iui$),然后经过一个循环并生成一系列输出($x{I,j}$)。然后,每个输出可以再次作为同一函数的输入,从而产生更多的输出($x{i,j,k}$)。我试图通过这个函数找到一组步骤,来达到一个特定的结束状态。在

这是一个普遍的问题,我的问题是python中什么样的代码结构可以处理这个问题。在

以下是一些元代码作为示例(尽管在实践中可能更复杂):def f(x):

for i in range(n):

if some_condition:

yield g(x,i)

yield false

然后对于一些$x\u 0$和一些$y$,我们要寻找一个序列$x\u 0,x_1,\ldots,x_k$,这样$x_k=y$,而$x{j+1}=g(x_j,i_j)$,对于{0,\ldots,k-1}$。在

要使用深度优先搜索来实现这一点,首先要计算$f(f(\ldots f(x)\ldots))$,直到它生成目标结果或为false。然后后退一步,从$f$得到第二个结果,然后重复(这是一个粗略的描述,但是你得到的想法是:基本上是深度优先搜索)。在

在我看来,yield关键字处理这个问题的效率很低。您还必须处理$(x,f(x),f(f(x)),\ldots)$的堆栈(我认为这是正确的术语),以便您在遇到死胡同时能够后退。在

这个一般性的问题是我经常遇到的,我在某种程度上解决了它即席,但我想知道是否有一个很好的通用结构来解决这个问题,它自然而有效地处理堆栈并探索python中可能的解决方案树。在

我希望这个问题足够清楚。我欢迎任何想法、评论、澄清或回答。在

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值