1. 程式人生 > >回溯經典-m圖著色問題(和地圖4色問題的區別)

回溯經典-m圖著色問題(和地圖4色問題的區別)

四色問題:

四色問題是m圖著色問題的一個特列,根據四色原理,證明平面或球面上的任何地圖的所有區域都至多可用四種、顏色來著色,並使任何兩個有一段公共邊界的相鄰區域沒有相同的顏色。這個問題可轉換成對一平面圖的4-著色判定問題(平面圖是一個能畫於平面上而邊無任何交叉的圖)。將地圖的每個區域變成一個結點,若兩個區域相鄰,則相應的結點用一條邊連線起來。多年來,雖然已證明用5種顏色足以對任一幅地圖著色,但是一直找不到一定要求多於4種顏色的地圖。直到1976年這個問題才由愛普爾(k.i.apple),黑肯(w.haken)和考西(j.koch)利用電子計算機的幫助得以解決。他們證明了4種顏色足以對任何地圖著色。

在這一節,不是隻考慮那些由地圖產生出來的圖,而是所有的圖。討論在至多使用m種顏色的情況下,可對一給定的圖著色的所有不同方法。

m圖著色問題:

題目大意:

1,已知一個圖g和m>0種顏色,在只准使用這m種顏色對g的結點著色的情況下,是否能使圖中任何相鄰的兩個結點都具有不同的顏色呢?這個問題稱為m-著色判定問題

2,在m-著色最優化問題則是求可對圖g著色的最小整數m。這個整數稱為圖g的色數。這是求圖的最少著色問題,求出m的值。

題目的解法:

第一個問題,m-著色判定問題:

可以通過回溯的方法,不斷的為每一個節點著色,在前面n-1個節點都合法的著色之後,開始對第n個節點進行著色,這時候列舉可用的m個顏色,通過和第n個節點相鄰的節點的顏色,來判斷這個顏色是否合法,如果找到那麼一種顏色使得第n個節點能夠著色,那麼說明m種顏色的方案是可行的。返回真即可:

 

第二個問題:求出最少的著色數m

有了上面的問題的積累,對於這個問題就很簡單了,只要從1到n列舉顏色數,來呼叫上面的DFS(0, m),如果有一次呼叫返回true,那麼這時這個顏色就是我們要求的最少的著色數。

 

參考: