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

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

数据结构如下:

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

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

img

  • 写回答

3条回答 默认 最新

  • 喝茶品人生 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日

悬赏问题

  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
  • ¥15 开发一个类似百度网盘的软件,在主页 文件列表点击进入文件夹,在文件夹里面还有文件夹,代码该怎么写?
  • ¥30 使用matlab将观测点聚合成多条目标轨迹
  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的