阿里 著色問題

2022-03-18 10:54:41 字數 1451 閱讀 9654

寫出圖著色問題程式:乙個圓餅,被從中點畫半徑分成n等分,有k種顏色,每個區域不能和兩邊顏色相同.

#include #include #include #include #include //將乙個圓形等分城n個小扇形,將這些扇形標記為1,2,3, …,n。現在使用m種顏色對每個扇形進行塗色,每個扇形塗一種顏色,且相鄰的扇形顏色不同。

////求:有多少種塗色方法。

////

////備註:1,不考慮數值越界的情況。

//// 2,n >= 1, m >= 3。

//// 3,乙個例子:如果n = 3,m = 3時,一共有6種塗法。

//將圓分成m個扇形,有n種顏色,相鄰扇形顏色不同

//(1)不要求n種顏色全用上,求所有方法數?

//(2)要求n種顏色全用上,求所有方法數?

using namespace std;

/** 請完成下面這個函式,實現題目要求的功能 **/

/** 當然,你也可以不按照這個模板來作答,完全按照自己的想法來 ^-^ **/

long long colour(int colour_number, int split_part)

return ret;

}int main()

給定無向連通圖g和m種不同的顏色。用這些顏色為圖g的各頂點著色,每個頂點著一種顏色。是否有一種著色法使g中每條邊的2個頂點著不同顏色。這個問題是圖的m可著色判定問題。若乙個圖最少需要m種顏色才能使圖中每條邊連線的2個頂點著不同顏色,則稱這個數m為該圖的色數。求乙個圖的色數m的問題稱為圖的m可著色優化問題。

輸入:無向圖,m

輸出:如果能,則輸出方案

演算法描述(迭代演算法)

color[n]儲存n個頂點的著色方案,可以選擇的顏色為1到m

t=1->n

對當前第t個頂點開始著色:

if:   t>n 則已求得乙個解,輸出著色方案即可

else: 依次對頂點t著色1-m,

if:   t與所有其它相鄰頂點無顏色衝突,則繼續為下一頂點著色;

else:   回溯,測試下一顏色。

#includeusing namespace std;

int color[100], sum;

bool ok(int k, int c[100][100])

void backtrack(int k, int n, int m, int c[100][100])

else

for (int i = 1; i <= m; i++)

}int main()

線段樹著色問題

線段樹節點記錄區間左右座標和區間顏色 如果父節點i表示 left,right 那麼父節點的左節點i 2表示區間 left,mid 有節點表示 mid 1,right 其中mid為left和right的中點 所有的節點存在tree陣列裡面 葉節點表示乙個點,即區間左右座標是一樣的 根節點代表區間 1,...

Polya 原理 著色問題

關於polya原理的應用經典例項 問題 用兩種顏色去染排成乙個圈的6個棋子,如果通過旋轉得到只算作一種。問有多少種染色狀態。解 先將棋子表上號 16 2 5 3 4那麼把所有通過旋轉m m大於等於0小於等於5 步的寫出來 1 6 5 6 2 5 1 4 6 5 3 4 2 3 1 4 3 2 m 0...

實驗12 1(著色問題)

圖的m著色問題。給定無向連通圖g和m種顏色,用這些顏色給圖的頂點著色,每個頂點一種顏色。如果要求g的每條邊的兩個頂點著不同顏色。給出所有可能的著色方案 如果不存在,則回答 no 如果把每乙個區域收縮為乙個頂點,把相鄰兩個區域用一條邊相連線,就可以把乙個區域圖抽象為乙個平面圖。用m種顏色為圖中的每個頂...