私は Java の初心者で、コードに問題があります。俳優から映画、俳優、映画、ケビン ベーコンへの最短パスを見つけたいと考えています。list
これは、 which に格納され"Actor A, Movie A, Actor B, Movie B, Kevin Bacon"
ます。これを行う最善の方法は、それを行うことだと思いましたrecursively
。しかし、私はStackOverflowError
.
俳優と映画を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;
}