【发布时间】:2018-02-11 17:19:44
【问题描述】:
假设我有一个类型为 T 的对象,其中包含一个包含 T 类型对象的 ArrayList 字段,我将其称为列表。我还有另一个类型为 T 的对象,我称之为目标。我正在努力寻找目标。为此,我想首先遍历列表以查看目标是否存在。如果是,我想返回原始对象。如果不是,那么我想通过列表逐个对象地检查每个列表的目标(如果找到则返回对象)。我想以递归方式继续此搜索,直到找到匹配项。
我不知道如何做到这一点。我能想到的两个选项是 while 循环和递归。但是,当我检查各种列表时,我必须在各个级别之间摇摆不定,我不知道该怎么做。
我的另一个想法是,我想做的事情与树的水平顺序横向相同。但是,到目前为止,我只了解了二叉树,如果可以在不遍历整个树的情况下进行级别顺序遍历,我不知道如何或是否可以将其转换为树。
下面,看看我到目前为止写的代码。这只会检查第一个列表是否匹配并且不会更深入,这是我需要的。
/**
* Searches for the shortest path between start and end points in the graph.
* @param start
* @param end
* @return a list of data, starting with start and ending with end, that gives the path through
* the graph, or null if no such path is found.
*/
public List<T> shortestPath(T startLabel, T endLabel){
List<T> list = new ArrayList<>();
list.add(startLabel);
while(true){
List<T> successors = successorList(startLabel);
if (containsMatch(successors, endLabel)) {
findMatch(successors, endLabel);
}
}
}
这种情况有意义吗?如果是这样,有什么想法吗?甚至可能吗? (我尝试搜索,但我的所有查询都没有任何用处)
提前感谢您的帮助。干杯!
【问题讨论】:
-
你的场景有点道理。您应该将您的数据描述为“图表”,而不是列表列表或其他任何内容,就像您的代码所说的那样。这会更有意义。你有一个图表,你正在寻找的是最短路径。比如说。 (就像下面的第一个答案一样,一开始我还以为你有一棵树。)
-
I tried searching最短路径问题:en.wikipedia.org/wiki/Shortest_path_problem -
@markspace 这正是问题所在!我试着把它分解成一个更小的问题,考虑到一个特定的策略,所以我不只是发布我的作业,但也许这不是最好的解决方法——我真的不知道。