用于保存课程要求的数据结构

我正在努力寻找一种有效的方法来存储课程内课程的要求。

例如:

  • 通过B后可以参加A课程

  • 当您通过C和D课程时,您也可以参加A课程

我希望能够使用树结构,这样我就可以轻松检查一个人是否通过了所有要求,但由于有多个选项可以通过要求,这是不可能的。

你知道任何技术或数据结构来解决这个问题吗?


Smart猫小萌
浏览 216回答 2
2回答

达令说

一个Course对象有一个对象列表Prerequisite,其中只有一个需要满足。一个Prerequisite对象有需要的清单Course对象,所有这些都需要被传递的Prerequisite被对象实现。public class Course {&nbsp; &nbsp; private List<Prerequisite> prerequisites;&nbsp; &nbsp; public boolean canBeTakenBy(Student student) {&nbsp; &nbsp; &nbsp; &nbsp; return prerequisites.isEmpty() ||&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;prerequisites.stream().anyMatch(p -> p.isFulfilledBy(student));&nbsp; &nbsp; }}public class Prerequisite {&nbsp; &nbsp; private List<Course> requiredCourses;&nbsp; &nbsp; public boolean isFulfilledBy(Student student) {&nbsp; &nbsp; &nbsp; &nbsp; return requiredCourses.stream().allMatch(student::hasPassed);&nbsp; &nbsp; }}public class Student {&nbsp; &nbsp; private Set<Course> passedCourses;&nbsp; &nbsp; public boolean hasPassed(Course course) {&nbsp; &nbsp; &nbsp; &nbsp; return passedCourses.contains(course);&nbsp; &nbsp; }}

牧羊人nacy

有很多方法可以完成你想要的,我个人认为最简单的就是拥有一个&nbsp;ArrayList< ArrayList < Course > >因此,例如,如果您想添加一个可能的要求选项,您可以ArrayList使用课程创建一个并将其推送到要求的末尾。稍后检查它,只需运行组合,复杂性应该不是问题,例如,如果您有 10 个可能的要求,每个要求 10 个课程,最坏的情况是 10x10 循环,10² 到计算机与没有相同根本。https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java