让我们说我有一个块集合.12是红色,8是蓝色,5是黄色,1是绿色.我需要创建一个算法,将这些对象输出到一个数组中,彼此相邻,没有红色块,没有蓝色块彼此相邻,等等.输出应该如下所示:
红色,蓝色,红色,蓝色,红色,蓝色,黄色,蓝色,绿色,红色,黄色等.
到目前为止,在我的编程经验中,我来到了不得不写一个算法的地方.我最后一次这样做是在大约两年前为创业公司工作.我在python中实现了这样的算法,但源代码不可用.我记得我花了至少100行创作.
这个算法有名字吗?我不想再次实施它.
我不知道这个问题的名称.下面是我想出来解决它的算法.
您需要跟踪剩余的每个块的#.
repeat:
output 1 block of largest color set.
output 1 block from the second largest color set.
Run Code Online (Sandbox Code Playgroud)
输出:
rbrbrbrbrgrbrgrgrgrgr grbgy
注意:在运行此算法之前,您需要检查最大颜色集的大小是否大于1 +其他颜色大小的总和.如果是,则没有解决方案.
注意:不需要从第二大集中选择.循环中的第二个选择可以来自任何非最大颜色集.