寫出圖著色問題程式:乙個圓餅,被從中點畫半徑分成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種顏色為圖中的每個頂...