我很新的Java和我在我的代碼,在這裏我想找到凱文·貝肯從演員到電影演員爲影片的最短路徑有問題。這存儲在list
中,其將變爲"Actor A, Movie A, Actor B, Movie B, Kevin Bacon"
。我認爲這樣做的最好方法就是去做recursively
。但是,我得到StackOverflowError
。Java中的Kevin Bacon路徑給出了堆棧溢出?
我存儲演員在HashMap<String, HashSet<String>>
和電影。無論演員和電影是keys
- 如果演員被調用,則返回電影的演員一直處於一個HashSet
,如果電影被調用,它返回一個HashSet
演員它有。該findCostars
方法找到所有演員給定演員已與聯袂主演。
這是我的代碼。任何幫助將被認真感謝!
public List<String> findBaconPath (String actor) throws IllegalArgumentException {
ArrayList<String> actors = new ArrayList<String>();
actors.add(actor);
ArrayList<String> path = helper(actors, actor);
return path;
}
public ArrayList<String> helper(ArrayList<String> curr, String actor) {
ArrayList<String> list = new ArrayList<String>();
HashSet<String> movies = myMovies.get(actor);
ArrayList<String> coStars = (ArrayList<String>) findCostars(actor);
Iterator<String> it = movies.iterator();
while (it.hasNext()) {
String next = it.next();
HashSet<String> movAct = myMovies.get(next);
if (movAct.contains("Bacon, Kevin")) {
list.add("Bacon, Kevin");
list.add(next);
list.add(actor);
return list;
} else {
Iterator<String> itAct = coStars.iterator();
while(itAct.hasNext()) {
curr.add(next);
String nextActorValue = itAct.next();
curr.add(nextActorValue);
helper(curr, nextActorValue);
}
}
}
return null;
}
你想那爛番茄的收視率和最小的最短路徑或路徑?如果是後者,你可能需要小心周圍涉及* Tremors *續集的淨負循環。 –