演算法分析與實踐 作業12

2022-08-19 00:18:18 字數 1197 閱讀 9300

圖的m著色問題。給定無向連通圖g和m種顏色,用這些顏色給圖的頂點著色,每個頂點一種顏色。如果要求g的每條邊的兩個頂點著不同顏色。給出所有可能的著色方案;如果不存在,則回答」no」。

考慮所有的圖,討論在至多使用m種顏色的情況下,可對一給定的圖著色的所有不同方法。通過回溯的方法,不斷的為每乙個節點著色,在前面n-1個節點都合法的著色之後,開始對第n個節點進行著色,這時候列舉可用的m個顏色,通過和第n個節點相鄰的節點的顏色,來判斷這個顏色是否合法,如果找到那麼一種顏色使得第n個節點能夠著色,那麼說明m種顏色的方案是可行的。

用m種顏色為無向圖g=(v,e)著色,其中,v的頂點個數為n,可以用乙個n元組x=(col1,col2,…,coln)來描述圖的一種可能著色,其中,xi∈,(1≤i≤n)表示賦予頂點i的顏色。例如,5元組(1, 2, 2, 3, 1)表示對具有5個頂點的無向圖(a)的一種著色,頂點a著顏色1,頂點b著顏色2,頂點c著顏色2,如此等等。如果在n元組x中,所有相鄰頂點都不會著相同顏色,就稱此n元組為可行解,否則為無效解。容易看出,每個頂點可著顏色有m種選擇,n個頂點就有mn種不同的著色方案,問題的解空間是一棵高度為n的完全m叉樹,這裡樹高度的定義為從根節點到葉子節點的路徑的長度。每個分支結點,都有m個兒子結點。最底層有mn個葉子結點。

#include#include

const

int maxn = 100 + 10

;int n, m, match; //

圖的頂點數,可用的顏色數量,邊的數量

int c[maxn][maxn]; //

圖的鏈結矩陣

int col[maxn]; //

當前的解

int sum = 0; //

方案數bool same(int

演算法分析與實踐 作業5

在包含有n個點的集合s中,找出距離最近的兩個點。設 p1 x1,y1 p2 x2,y2 pn xn,yn 是平面的n個點。嚴格地講,最近點對可能不止一對,此例輸出一對即可。利用分治求解 首先對所有的點按照x座標 或者y 從小到大排序 排序方法時間複雜度o nlogn o nlogn o nlogn ...

演算法分析與實踐 大作業

給定n個圓的半徑序列,將它們放到矩形框中,各圓與矩形底邊相切,求具有最小排列長度的原序列。一般而言我們會想到這種做法 但是這種只是其中一種,我們並沒有考慮完全,還有一些如 小球本來可以放到兩個大球的中間,不增加長度的 這個就類似於最短路的問題,由此我們想到了回溯演算法。開始時設a r1,r2,rn ...

演算法分析與實踐 作業13

讀後感 由於參與了我院acm實驗室的緣故,我有幸閱讀了 演算法競賽 高階指南 這本書。儘管並沒有能完全地滲透這一本書,但是還是在這本書上學習一些比較有用的演算法。演算法可以說是基礎,很多問題倘若我們使用暴力的方法去解決,複雜度甚至可以達到o n 但是當我們使用了一些演算法去優化,複雜度可以降到o n...