-1

我有一个学校项目,我必须用 C# 编写一个程序。我认为我在正确的轨道上,但我坚持这个问题。

在程序的这一部分,我必须编写一个回溯算法。我有课程(英语、物理、数学等),所有课程都持续特定时间。(例如 1h、2h、3h、5h 等)。另外,我有 maxClassHours ,它显示了一个人今天可以在学校度过多少时间。该算法应尽可能收集填充此 maxClassHours 的类的所有可能组合。

重要的是我只能坐一次给定的课程!所以我只能上一节数学课。

例如,maxClassHours 是 5,所以我可以花 5 个小时坐在不同的班级。

假设我有这些课程:

  • 数学 - 2小时
  • 物理 - 1小时
  • 音乐 - 2 小时
  • 舞蹈 - 5小时
  • 体育 - 3小时
  • 地理 - 5小时
  • 英语 - 3 小时
  • 法语 - 1 小时
  • 科学 - 7小时
  • 艺术 - 1小时

目标是找到填补这 5 个小时的所有可能组合(使用回溯算法)。

我希望它有意义...谢谢您的帮助。

编辑:我想了解如何将回溯算法应用于此问题。

EDIT2:我尝试了几个小时的工作,但我无法取得重大进展,这就是我寻求帮助的原因......

4

1 回答 1

2

试试这个思考过程:

  1. 选择一个班级
  2. 我的总时间仍然少于最大值吗?
    • 如果是这样,请选择其他课程
    • 如果没有,请删除最后添加的类并在其位置添加不同的类

例如:

最长为 5 小时

| Class List                       | Total Time |
|----------------------------------|------------|
| Math                             | 2h         |
| Math, Physics                    | 3h         |
| Math, Physics, Music             | 5h (save)  |
| Math, Physics, Dance             | 8h         |
| Math, Physics, P.E.              | 6h         |
| Math, Physics, Geography         | 8h         |
| Math, Physics, English           | 6h         |
| Math, Physics, French            | 4h         |
| Math, Physics, French, Science   | 11h        |
| Math, Physics, French, Art       | 5h (save)  |
| Math, Music                      | 4h         |
| ...                              | ...        |
于 2016-04-29T14:47:47.527 回答