我们有一个自定义数据结构,具有以下属性: 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"]]
但是,现在结果为空,它无法列出任何可以获取目标字符串的项目序列,这显然不符合当前情况。
我有点被困在这里,我知道我的深度优先搜索逻辑可能会有所作为。任何输入都将受到高度赞赏!谢谢。
答案 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)