Some other details about the algorithm:

Some words about the algorithm: FET uses a heuristic algorithm, placing the activities in turn, starting with the most difficult ones. If it cannot find a solution it points you to the potential impossible activities, so you can correct errors. The algorithm swaps activities recursively if that is possible in order to make space for a new activity, or, in extreme cases, backtracks and switches order of evaluation. The important code is in the files src/engine/generate.cpp and src/engine/generate_pre.cpp (get FET sources version). Probably, the algorithm mimics the operation of a human timetabler.