回溯法之k著色問題

2022-08-20 07:39:11 字數 920 閱讀 8728

1

package main23

import (4"

fmt"5)

67 type graphic struct

1314 func (g *graphic) check(n int) int20}

21return122

}2324//

遞迴回溯求解

25 func (g *graphic) recuirse(k int) int

else36}

37}38return039

}40}41

42//

迭代回溯求解

43 func (g *graphic) iterate() int

52if i == nodes

55}

56//

第i個頂點遍歷著色了所有顏色數, 都失敗(g.color[i] > g.colors),使i--, 對i--的八個頂點進行下一顏色的著色過程

57 g.color[i] = 0

58 i--59}

60return061

}6263//

列印兩種實現方法的著色結果

64 func (g *graphic) paint(c int

) 73 } else

76 g.color = make(int

, nodes)

77 fmt.println("

\n iterate paint:")

78if g.iterate() > 0

82 } else

8586}87

8889

func main() , , , , }}

91 g.paint(3

)92 }

著色問題(回溯法)

1.問題 圖的m著色問題。給定無向連通圖g和m種顏色,用這些顏色給圖的頂點著色,每個 頂點一種顏色。如果要求g的每條邊的兩個頂點著不同顏色。給出所有可能的著色方案 如果不存在,則回答 no 2.解析 在填寫每乙個頂點的顏色時檢查與相鄰已填頂點的顏色是否相同。如果不同,則填上 如果相同 衝突 則另選一...

回溯法之經典問題 皇后問題

給出n n的棋盤,能夠多少種不同的放置 皇后 的方法。遞迴實現 hdu 2553 dfs include using namespace std int n,total int pos 10 存的是row的編號,通過row自己的下標row可以找到對應的pos row 因為dfs存的時候是pos ro...

回溯法,回溯法解裝載問題

利用回溯法解問題時一般按以下三步驟 1 定義問題的解空間 2 確定易於搜尋的解空間結構 3 以深度優先策略搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋 二 回溯法應用 裝載問題 一批貨櫃共n個要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi且w1 w2 wn c1 c2 試確定乙個...