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
41 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哥 用很隨意的語氣,關係特好的樣子 如果自...