若两个标签不能放在同一显示层,可以把它们之间画一条冲突边。安排最少层数就是让相邻标签的层号不同,但没有直接冲突的标签可能共用一层。
本例采用的规则
本例七个标签,输入是一组无向冲突边。依次给标签分配从零开始的层号,检查已安排邻居是否冲突,必要时回退;逐步尝试允许一层、两层等,找到第一种完整可行方案。层号只是分类,不表示前后遮挡关系。
独立输入与结果
标签编号零至六,冲突边为[(0, 1), (0, 2), (0, 4), (0, 6), (1, 2), (2, 3), (2, 6), (3, 5), (4, 6)]。
标签 | 分配层号 0 | 0 1 | 1 2 | 2 3 | 0 4 | 2 5 | 1 6 | 1 最少层数3;一组最大的两两冲突标签(0, 1, 2),下界3。 逐条冲突检查: 0—1:层0与层1 0—2:层0与层2 0—4:层0与层2 0—6:层0与层1 1—2:层1与层2 2—3:层2与层0 2—6:层2与层1 3—5:层0与层1 4—6:层2与层1
表中的编号仅用于区分当前案例里的对象,不能与数值大小或另一份记录中的身份混淆。先核对输入、单位和边界约定,再跟随过程检查输出。空列表、不存在和数值零各有不同含义,分数则保留精确形式便于复算。
检查与练习
每条冲突边的两端必须不同层。一个两两冲突的标签集合需要至少同样多的层,但最大这种集合大小只是一般下界,不保证在所有图上都正好等于最少层数。示例同时计算这个下界供核对。
先检查完整方案覆盖所有标签,不能靠漏掉一个难安排的标签降低层数。再验证更少一层确实没有任何合法方案。几种层号整体互换是同一种分组效果,不能因为编号不同就认为显示层需求发生变化。
结论适用范围
这些边由输入明确给出,本例不负责从像素矩形自动检测碰撞,也不移动标签或缩短文字。实际界面若要满足优先级、固定层或空间位置限制,需要把额外约束写入问题。
这是一份可重复演算的游戏知识记录,结论只对写明的输入与规则成立。练习时可以先改变一个条件,再对照中间记录寻找变化从哪一步开始。若结果不同,应先确认操作顺序和边界定义,而不是只改最后一个数字;原始输入与完整过程应一起保留。
