在最大度为 D 的简单无向图上为每条边分配颜色,使任意相邻边颜色不同;一般可在 (D+1) 色内构造,二分图可达 D 色。

Description: Given a simple, undirected graph with max degree , computes a -coloring of the edges such that no neighboring edges share a color. Time: O(NM)

  • 定义与背景

    • 边染色:将无向图 G=(V,E) 的每条边 e 赋予一个颜色 c(e),满足共享端点的两边颜色不同。
    • 色数目标:设最大度为 Δ(G)=D,一般图存在使用 D+1 种颜色的多项式构造;对二分图可在 D 种颜色内完成。
    • 相关结论与工程取舍:最优 D-着色在一般图中是困难问题;因此常用 (D+1)-色构造作为稳定上界。
  • 典型适用场景

    • 调度/资源分配:如“端口/信道冲突避免”的时隙/频段分配,边表示冲突关系。
    • 分解为匹配:将图的边集拆成若干“同色匹配”,便于并行执行或批处理。
  • 接口/数据结构(据实现)

    • 函数:edgeColoring(int N, vector eds) → vi colors
      • N:点数;eds:边列表(按输入顺序需要返回对应颜色)。
      • 返回:每条边的颜色编号 0..ncols-1,其中 ncols= D+1(一般图)或 D(二分图特化)。
    • 邻接槽:为每个点维护 ncols 个“颜色槽”,表示该点在某颜色是否已被占用。
    • 辅助结构:fan、loc、free、cc(度)等,用于寻找/释放可用颜色槽并维持一致性。
  • 核心流程/要点(Misra–Gries 风格的 (D+1) 色构造)

    1. 统计每点度 cc[u],令 ncols = max(cc)+1(一般图安全上界)。
    2. 初始化每个点的 ncols 槽,标记已占/空闲;构建边序遍历。
    3. 处理每条边 (u,v):
      • 若存在某颜色 d 在 u 与 v 处均空闲,则直接赋色 d。
      • 否则构造“扇形 fan”在 u 附近旋转,寻找一条可释放的颜色链(交替路),对相邻边沿颜色链翻转,腾出颜色槽后再为 (u,v) 赋色。
      • 在实现中以 fan、loc、free 的更新保持局部一致;失败时继续扩展/旋转直至成功。
    4. 遍历完成后,按 eds 顺序导出每条边的颜色编号。
  • 特性与边界条件

    • 二分图退化为 D 色:将边集分解为不相交的最大匹配序列,每轮用匹配填满一种颜色,最终色数不超过 D。
    • 输入限制:简单无向图(不允许自环/多重边);若存在重边,应按多重图版本修订(槽与 fan 的语义需扩展)。
    • 稳健性:颜色槽与 fan 链的维护需与边序一致,避免出现“同端点同色”冲突。
    • 时间复杂度:整体 O(NM) 级别,适用于中等规模。
  • 变体/扩展

    • 二分图边染色(D 色):可迭代求最大匹配或按度分层匹配;也可用网络流建模(每色一层)但常数较大。
    • 在线/动态边染色:在插入/删除边时维护颜色;(D+1)-色仍成立,但需要动态维护交替链。
    • 一般图最优 D-色:为 NP-难问题,竞赛与工程中通常不追求最优,仅用 (D+1)-色的确定性构造。
  • 正确性要点与不变式

    • 有效性:同色边构成匹配;任一赋色或颜色链翻转均保持每点“每种颜色至多占 1 条边”的约束。
    • 终止性:颜色链在有限槽空间内必定找到可释放位置或闭环,从而完成当前边赋色。
    • 上界保证:ncols ≥ D+1 时,总能为任一新边找到可行颜色(或通过链翻转释放)。
  • 与相邻技术对比与取舍建议

    • 与匹配分解:二分图优先使用“匹配分解为 D 组”的方案(简单且最优);一般图采用 (D+1) 色构造稳定可靠。
    • 与流/割:流模型可用于二分图匹配式染色,但对一般图并不直接给出 (D+1)-色构造。
    • 与带权匹配 079-图论-带权匹配:边染色关注冲突约束下的分组;带权匹配关注权和最优,与染色目标不同。

关联节点