数据结构如下:
public class Person{
private String id;
private String gender;
private String fatherId;
private String motherId;
}
需求:公母的动物繁殖,需要加一个校验,公和母的三代的族谱不能有交集,所说的三代包含的数据范围如下图,就是以图中的自己为基点,怎么把图中包含的数据都查出来?
数据结构如下:
public class Person{
private String id;
private String gender;
private String fatherId;
private String motherId;
}
需求:公母的动物繁殖,需要加一个校验,公和母的三代的族谱不能有交集,所说的三代包含的数据范围如下图,就是以图中的自己为基点,怎么把图中包含的数据都查出来?
import java.util.*;
class Person {
private String id;
private String gender;
private String fatherId;
private String motherId;
private List<Person> children;
public Person(String id, String gender, String fatherId, String motherId) {
this.id = id;
this.gender = gender;
this.fatherId = fatherId;
this.motherId = motherId;
this.children = new ArrayList<>();
}
public String getId() {
return id;
}
public String getGender() {
return gender;
}
public String getFatherId() {
return fatherId;
}
public String getMotherId() {
return motherId;
}
public List<Person> getChildren() {
return children;
}
public void addChild(Person child) {
children.add(child);
}
}
class Family {
private List<Person> members;
public Family() {
this.members = new ArrayList<>();
}
public void addMember(Person member) {
members.add(member);
}
public List<Person> getMembers() {
return members;
}
}
public class ThreeGenerations {
public static List<Person> findThreeGenerations(Person target, Family family) {
Set<String> visited = new HashSet<>();
List<Person> result = new ArrayList<>();
visited.add(target.getId());
dfs(target, visited, result, 0, family);
return result;
}
private static void dfs(Person person, Set<String> visited, List<Person> result, int generation, Family family) {
if (generation == 3) {
result.add(person);
return;
}
for (Person child : person.getChildren()) {
if (visited.contains(child.getId())) {
return;
}
visited.add(child.getId());
dfs(child, visited, result, generation + 1, family);
}
}
}