终止bfs的条件

fcy6dtqo  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(342)

我有一个赋值,其中给定一个元组列表,每个元组包含两个字符串,如下所示:
[ ("...","...") , ("...","...") , ("...","...") ... ]
我必须计算最短路径,这将导致一个极端的字符串。
极端字符串定义为两个字符串的元组,其中第一个字符串等于第二个字符串。
我知道这听起来很混乱,所以让我举个例子。
鉴于:
列表[(“0”,“100”),(“01”,“00”),(“110”,“11”)]
指数为0,1,2
最短路径为:[2,1,2,0]
极限字符串等于:“110011100”
逐步解释:
从索引2的元组开始,初始字符串是:“110”,“11”
追加索引1的元组下一个字符串是:“11001”,“1100”
追加索引2的元组,下一个字符串是:“11001110”,“110011”
追加索引0的元组最后一个字符串是:“110011100”,“110011100”
假设你从tuple(“x”,“y”)开始,然后你选择tuple(“a”,“b”),结果是(“xa”,“yb”)。
我处理这个问题的方法是使用bfs,我已经实现了,听起来对我来说是正确的,但有一个问题,我正在处理。
如果输入类似于:
[("1","111")]
然后算法将永远不会终止,因为它将始终处于“111…”-“111111111…”状态。
检查这个特定的输入不是一个好主意,因为有许多输入可以重现这个结果。
有一个迭代的上界也不是一个好主意,因为在某些情况下,有限的结果实际上可能存在于迭代界之后。
任何洞察都会非常有用。

qgelzfjb

qgelzfjb1#

因为这是一项任务,我不能真正为你解决它,但我会尽量给你提示:
bfs听起来也很棒。
bfs与dfs的一个区别是,您将n级的元素放入队列(与堆栈相反)。由于queue是fifo,您将在处理n+1级别的元素之前处理n级别的元素。因此该算法将完成(尽管可能会占用大量内存)。
有趣的部分是你到底在队列中放了什么,以及你是如何组织遍历算法的。我觉得你已经解决了这个问题,或者至少你有了方向。所以想想我的前一段,希望你能找到解决办法;)

相关问题