使用DFS查找一组字符串

时间:2015-11-29 19:55:48

标签: java depth-first-search

我们有一个自定义数据结构,具有以下属性: id,它有权访问的id列表(可以为空),string(可以为空)

e.g。

Overridable method call in constructor

给定起始标识“Thomas” [“Donald”, “Barbara”] “a” “Donald” [“Sarah”, “Lisa”] “” “Lisa” [] “c” “Sarah” [“Lisa”, “Thomas”, “Barbara”] “d” “Barbara” [“Sarah”] “e” ,我们尝试收集的目标字符串集是“Donald”,列出所有可能的方法来访问目标集中的所有字符串。每次我们尝试通过id访问项目时,我们都需要确保此ID有效。 对于上面给出的示例,一个可能的路径是[“a”, “c”, “d”]

另一个例子,给定一个开始标识[[“Donald”], [“Sarah”, “d”], [“Thomas”, “a”], [“Donald”], [“Lisa”, “c”]]和我们正在尝试收集的目标字符串集是[“a”,“d”],一条可能的路径是"Sarah"

以下是我尝试解决此问题的方法。由于数据库可能非常大,我将所有变量存储在HashMap中作为类变量。然后使用DFS搜索目标字符串列表。

每次搜索当前项目以及idList中的所有项目时,如果找到匹配项,则将此项目添加到路径,直到找到目标中的所有字符串。该过程以递归方式完成。

然而,这不是一个典型的DFS,因为它每次尝试遍历的列表都不同,而且,无论如何,第一项应始终添加到路径中。这就是我被卡住的原因。

我在代码中犯了一个粗心的错误,感谢@ Mil4n指出它。这是修改后的代码:

[["Sarah", "d"], ["Thomas", "a"]]

但是,现在结果为空,它无法列出任何可以获取目标字符串的项目序列,这显然不符合当前情况。

我有点被困在这里,我知道我的深度优先搜索逻辑可能会有所作为。任何输入都将受到高度赞赏!谢谢。

1 个答案:

答案 0 :(得分:0)

(1)如果阻止不正确(假设您没有周期性参考),则为其他人

在您第一次通过// In your wscript import os devnull = ('nul' if 'nt' in os.name '/dev/null') def build(bld): bld(rule='cmd ${SRC} ${TGT} 1>' + devnull + ' 2>&1', source='input.txt', target='output.txt') 循环之前,您的列表如下所示:[Donald,Sarah,Lisa] 一旦你的迭代器达到i = 1(莎拉) 在else if条件条件下,你检查Sarah是否可以访问Sarah,它将返回false!

(2)这不会将当前项目放在列表的头部:

for

这将:

    List<String> list = new ArrayList<String>();
    list.add(id); // add current item id to the head of list

(3)如果你想遍历所有项目,它应该是i&lt;大小(或i <= size-1)