图形着色,但着色边而不是顶点

问题描述 投票:0回答:1

请回答我的问题。我已经坚持了好几天了。

给定一个无向图,问题是用颜色 0、1 和 2 为其边着色,以使所有边的颜色总和最小。此外,对于每条着色为 0 的边,必须存在一条着色为 2 的相邻边。如果两条边共享公共顶点,则将它们视为相邻边。任务是找到给定图中边的最小颜色总和。我知道由于问题的性质我应该使用动态编程,但只是不知道如何使用。 算法是什么?

考虑将边作为一对顶点给出

例如,对于给定的边集:节点数:3,边数:3

1 2

2 3

1 3

输出为2。

或者对于以下输入:节点数:18,边数:27

1 2

1 4

1 6

3 2

3 4

3 6

2 5

4 5

7 8

7 10

7 12

9 8

9 10

9 12

8 11

10 11

13 14

13 16

13 18

15 14

15 16

15 18

14 17

16 17

5 11

12 17

18 6

输出为14

graph dynamic-programming divide-and-conquer graph-coloring
1个回答
0
投票
  • 用 1 给每条边上色
  • 循环A
    • 设置最大值=0
    • 设置 MAXEdge = 任意值
    • LOOP E 越过颜色 1 的边缘
      • 设置 S = 0
      • LOOP e 越过边到 E 两端的顶点
        • IF e 连接到叶子(度数为 1 的顶点)
          • 继续
        • 如果 e 没有着色 1
          • 继续
        • 设置S = S + 1
      • ENDLOOP e
      • 如果 S > 最大值
        • 设置最大值=S
        • 设置最大边缘 = E
    • 端环E
    • 如果最大值==0
      • 输出所有边缘颜色的总和
      • 停止
    • COLOR MAXEdge 颜色 2
    • LOOP e 越过边到 MAXEdge 两端的顶点
      • 用 0 给 e 上色
    • 端环A
© www.soinside.com 2019 - 2024. All rights reserved.