java最优组合算法问题,编程实现字母最优组合生成最优解

要求:输入A~K中的任意几个字母(无重复),对这些字母进行组合。输出最优组合的最小组数n和组合方案,使用java语言。

约束条件:A可以和B一组;
A可以和E、F、G一组;
C、D、H要单独分组;
I可以和E、F、G一组;
J可以和E、F、G一组;
K可以和E、F、G一组;
如果可以,希望用退火算法的思想来解决本问题。毕设赶着要用这个算法,希望尽快提供解决方案,拜谢!

两两组合,还是可以多个组合?

必须是4个一组吗?还是随即几个一组都可以?

其实这个问题是我从列车专项修制定维修计划中抽象出来的。原要求为:列车调度员合法的登录系统后,以保证预分配列车在维修任务完成后能够尽快回到原固定交路上运行为计划目标,自动制定半月专项修计划,在制定专项修计划时,需要考虑专项修之间的约束。具体约束如下:
①专项修与空心轴探伤能一起进行。
②专项修与牵引电机注脂、齿轮箱换油、空压机换油等可以一起进行。
③LU探伤、镟轮要单独扣修。
④I2修不能与任何其他作业项目混合,M修则可以与齿轮箱换油、牵引电机注脂、空压机换油等一起进行。
⑤列车调度员每天的维修量一定,不能安排超过列车调度员维修能力数量的列车进行维修。
所以这里求助各位高手设计一个最优组合算法求的最优组合时的最小分组组数和分组情况。