著色問題(回溯法)

2021-10-06 17:34:55 字數 623 閱讀 7588

1.問題

圖的m著色問題。給定無向連通圖g和m種顏色,用這些顏色給圖的頂點著色,每個

頂點一種顏色。如果要求g的每條邊的兩個頂點著不同顏色。給出所有可能的著色方案;如果不存在,則回答「no」。

2.解析

在填寫每乙個頂點的顏色時檢查與相鄰已填頂點的顏色是否相同。如果不同,則填上;如果相同(衝突),則另選一種;如果已沒有顏色可供選擇,則回溯到上一頂點。重複這一過程,直到所有頂點的顏色都已填上。

設計的思路就是設定乙個檢查函式,若兩個節點相連並且顏色相同,則返回0,否則返回1。

若返回值為1則記錄下顏色,若為0則返回上一頂點。

3.設計

1.檢查

intcheck

(int k)

//檢查第i個頂點的顏色是否滿足條件

return1;

2.回溯

for(

int i=

1;i<=m;i++)

color[step]=0

;//回溯 置為0

}

4.分析

o(n^m)

5.原始碼

回溯法之k著色問題

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 ...

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

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

回溯法 堡壘問題

描述 城堡是乙個4 4的方格,為了保衛城堡,現需要在某些格仔裡修建一些堡壘。城堡中的某些格仔是牆,其餘格仔都是空格,堡壘只能建在空格裡,每個堡壘都可以向上下左右四個方向射擊,如果兩個堡壘在同一行或同一列,且中間沒有牆相隔,則兩個堡壘都會把對方打掉。問對於給定的一種狀態,最多能夠修建幾個堡壘。輸入 每...