回溯算法

4        Design a backtracking algorithm to color a simple graph with m colors. If such a coloring exists, print all valid colorings. We assume the graph is represented by an adjacent matrix A.

 

Solution:

 

         Let C = {1, 2, …, m} be the set of m colors.

We use an n-tuple (x[1], x[2], …, x[n]) to represent a coloring, where x[i] Î C is the color for vertex i. A coloring is valid if, for every A[i, j] = 1,  x[i] ¹  x[j].

 

Valid(k, c)

//input: x[1..k-1]

//This function will check if color c can be assigned to x[k] such that c ¹  x[i] if (k, i) is an edge, for i  = 1, 2, …, k-1.

1                    for i ¬ 1 to k-1

2                      do if A[k, i] = 1 and x[i] = c

3                             then return valid (k, c) = false

4                    return valid (k, c) = true

5                    End

 

m-color(k, n)

//input: x[1..k-1]

1                    for c ¬ 1 to m

2                      do if valid (k, c) = true

3                             then {    x[k] ¬ c

4                                                 if k = n

5                                                  then {    coount¬count+1

6                                                                    output x[1..n]

7                                                         }

8                                                  else m-color(k+1, n)

9                                     }

10                End

 

 The main algorithm is as follows.

 

Color(A[1..n, 1..n], m)

//input is matrix A[i,j]

1        count ¬ 0

2        m-color(1, n)

3        if count = 0

4          then return (‘not m-colorable’)

5          else return (‘There are’ count ‘colorings’)

6        End

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值