hdu 5113 我不是四色定理 dfs 剪枝

2021-07-24 08:04:04 字數 1579 閱讀 1841

e - 我不是四色定理

time limit:2000msmemory limit:512000kb64bit io format:%i64d & %i64u

submit

status

practice

hdu 5113

description

四色定理是給定的任何乙個平面分離成連續的區域,產生乙個包含許多區域的圖,四種顏色給不同區域塗色,任意相鄰的

兩個區域顏色不能相同。                                          

-維基百科,自由的百科全書

在這個問題上,你必須解決四色問題。嘿,我只是在開玩笑。

你需要解決乙個類似的問題:有乙個包含從1到k一共k種顏色的n×m棋盤,使得任意兩個相鄰的區塊不能有相同的顏色

(如果它們的上、下、左、右任意一邊的顏色與自身顏色不同)。第i種顏色可以被使用ci次。

input

第一行包含乙個整數t(1<=t<= 5000), t表示測試用例的數量。

對每乙個測試用例第一行包含三個整數n,m,k(0第二行包含k個整數ci(ci>0),表示第i種顏色可以被使用的次數。

輸入保證c1+ c2+...+ ck=n*m。

output

對每個測試用例,第一行包含「case #x:」, x是用例的序號( 從1開始)。

如果有滿足條件的塗色方法就輸出「yes」,如果沒有就輸出「no」。接下來的n行每行由m個表示第i種顏色的數字構成,

數字之間有乙個空格隔開。

如果有多重塗法,輸出其中的一種。

sample input

4

1 5 2

4 13 3 4

1 2 2 4

2 3 3

2 2 2

3 2 3

2 2 2

sample output

case #1:

nocase #2:

yes4 3 4

2 1 2

4 3 4

case #3:

yes1 2 3

2 3 1

case #4:

yes1 2

2 33 1

思路:資料量不大,原本我以為不用剪枝的。。。可是不剪枝就tle
關鍵剪枝: 當某種顏色的數量大於剩下格仔數的一半時,就直接返回,因為這種情況一定會有相鄰的顏色相同的情況
ac**:
#include#includeint map[7][7];

int num[30];

int n,m,k,flag;

void dfs(int x,int y,int sum)

//一行一行的去填色

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

for(int i=1;i<=k;i++)}}

return ;

}int main()

printf("\n");}}

}return 0;

}

hdu5113 四色定理 搜尋 剪枝 坑點多多

給定乙個 m n的圖,和k種顏色的數目,要求染色,相鄰不能同顏色 搜尋 回溯。坑點 1 在輸出的時候,最後乙個數字和 n連起來輸出就會wa。更正 不能這樣輸出printf d n col i j 其他就行。後面附上蜜汁wa 2 在向上取整時,用ceil就會tle。include include in...

你不是我,你不是我

this afternoon,i got a tickert directly from the xi station,on this condition,it came so joyfull to me.as one of your guests in any case i should get ...

我不是高手!

寫就要寫最難懂的程式 用記事本做編輯器 編譯就得用最難用的編譯器 程式不帶半點注釋 程式裡面至少要有三個類 什麼多繼承呀,多執行緒呀,template呀,inline呀 能給他用的全給他用上 一行裡面有while有 有?有goto 文章裡面一定要搬出乙個xx哥 用很隨意的語氣,關係特好的樣子 如果自...