C# 优化:回溯算法
我有一个学校项目,我必须用c语言写一个程序。我想我的思路是对的,但我坚持这个问题。C# 优化:回溯算法,c#,algorithm,backtracking,recursive-backtracking,C#,Algorithm,Backtracking,Recursive Backtracking,我有一个学校项目,我必须用c语言写一个程序。我想我的思路是对的,但我坚持这个问题。 在程序的这一部分我要写一个回溯算法。我有课(英语、物理、数学等),所有的课都有一个特定的时间。(例如1h、2h、3h、5h等)。此外,我还有maxClassHours,它显示了一个人今天可以在学校花多少时间。 该算法应尽可能收集填充此maxClassHours的所有可能的类组合 重要的是我只能上一节课!所以我只能上一节数学课。 例如,maxClassHours是5,因此我可以花5个小时坐在不同的课堂上。 假设
在程序的这一部分我要写一个回溯算法。我有课(英语、物理、数学等),所有的课都有一个特定的时间。(例如1h、2h、3h、5h等)。此外,我还有maxClassHours,它显示了一个人今天可以在学校花多少时间。 该算法应尽可能收集填充此maxClassHours的所有可能的类组合
重要的是我只能上一节课!所以我只能上一节数学课。
例如,maxClassHours是5,因此我可以花5个小时坐在不同的课堂上。
假设我有这些课程:
- 数学-2h
- 物理-1h
- 音乐-2h
- 舞蹈-5h
- P.E.-3h
- 地理-5h
- 英语-3h
- 法语-1h
- 科学-7h
- 艺术-1h
EDIT2:我花了几个小时试图解决这个问题,但没有取得重大进展,这就是为什么我要寻求帮助…试试这个思考过程:
- 如果是,请选择另一个类
- 如果没有,请删除最后添加的类并在其位置添加其他类
| 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 |
| ... | ... |
你的问题到底是什么?(如果是“SO社区会为我做我的学校项目吗?”,恐怕答案是否定的)你的代码在哪里?你在忙什么?帮我从这个开始。我想了解回溯算法如何应用于这个问题。“SO社区会为我做学校项目吗?”我不是在问这个问题。@nethuszar-你需要自己做这个研究-试试谷歌。当你有办法尝试时,就写一些代码,当你陷入困境时,就来问一个问题。这就是我们在这里工作的方式。谢谢你的回答。我有类似的东西,但问题是我必须找到所有可能的组合。所以找到一个好的组合对我来说很有用,但是找到所有的组合…为什么你不发布你到目前为止所拥有的呢?这样我们就可以提供更具体的帮助。它不是用英语写的,我觉得没有那么好。我的算法是这样的:从第一个类开始,如果它小于或等于maxTime,那么我添加它。检查列表中的第二节课如果第一节课的时间+这节课的时间是请注意我上面解释的最后一部分
,如果不是,请删除最后添加的课程,并在其位置添加一个不同的课程
。找到大于或等于5h的组合后,需要删除添加的最后一个类,然后开始在其位置添加类,直到找到另一个大于或等于5h的组合。这正是我在示例中演示的内容。这种类型的问题适合于递归解决方案,如果没有递归,可能会更复杂一些。祝你好运