qq_37407558 2023-06-19 15:05 采纳率: 100%
浏览 31
已结题

java怎么用递归或者其他方式查询三代内的族谱数据

数据结构如下:

public class Person{
    private String id;
    private String gender;
    private String fatherId;
    private String motherId;
}

需求:公母的动物繁殖,需要加一个校验,公和母的三代的族谱不能有交集,所说的三代包含的数据范围如下图,就是以图中的自己为基点,怎么把图中包含的数据都查出来?

img

  • 写回答

3条回答 默认 最新

  • Watch the clown 2023-06-19 15:15
    关注
    
    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);
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 6月19日