В настоящее время я работаю над проблемой, когда мне нужно найти цепи дружбы через рекурсию на Java. По статистике, человек знает другого человека примерно по 6 путевым точкам - это цепь, которую я пытаюсь найти.Java: Поиск цепочек дружбы через рекурсию
У меня есть класс «Человек», который определяет имя и прямых друзей:
public class Person
{
private Person[] friendChain;
private String name;
public Person(String name, Person[] friendChain)
{
this.friendChain = friendChain;
this.name = name;
}
public Person[] getFriends()
{
return this.friendChain;
}
public String getName()
{
return this.name;
}
public boolean isFriendWith(Person person)
{
for(Person p: this.friendChain)
{
if(p != null && person != null && p.getName().equals(person.getName()))
return true;
}
return false;
}
public boolean equals (Person person)
{
return this.name.equals(person.getName());
}
public String toString()
{
return this.getName();
}
}
Схема была дана, что дает пример цепи, где стрелки указывают одностороннюю или двухстороннюю отношения (как Томас знает Терезу, но Тереза не знает Томас):
так в основном мой результат должен выглядеть похож на что-то вроде этого:
result = getFriendshipChain(adam, theresa);
result[0].getName(); // "Michael"
result[1].getName(); // "Kerstin"
result[2].getName(); // "Thomas"
result[3].getName(); // "Theresa"
result[4].getName(); // null
result[5].getName(); // null
Я проделал много рекурсивного программирования в прошлом, но я просто не могу понять, что это сейчас - я буду признателен за любую помощь!
Вы не должны мыслить в терминах цепей, а в терминах графиков. Найдите библиотеку графа, сделайте так, чтобы каждый человек был вершиной, каждая дружба была краем и попросила ее получить кратчайший путь. Поскольку вы говорите о направлениях, вы должны найти ориентированный график/ –
Некоторые вещи о 'Person # equals'. Сначала вам нужно [удовлетворить контракт] (http://stackoverflow.com/questions/3181339/right-way-to-implement-equals-contract). Во-вторых, вам нужно [переопределить 'hashcode'] (http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in-java). Наконец, вы должны использовать его в 'isFriendsWith'. – bradimus
Почему вы ожидаете 'result [2]', чтобы вернуть Томаса? По вашей диаграмме Крестин - друг с Майклом и Томасом, разве это не следует рассматривать, когда вы проходите свой путь? – px06