SSL-练习题目:种树 题解
生活随笔
收集整理的這篇文章主要介紹了
SSL-练习题目:种树 题解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
種樹(normal)
Time Limit:1000MS? Memory Limit:65536K
Total Submit:213 Accepted:114
Description
在6*6的方格地盤中,種植24顆樹,使每行、每列都有4顆樹。
求出所有可能的種植方案總數(shù)。
種植方案的說明:輸出一個6*6的矩陣,種樹的方格用“*”表示,沒種樹的用“.”表示。
如下是一種方案((樣例僅說明格式,并不代表結(jié)果)
****..
..****
**..**
..****
****..
**..**
Input
Output
一個數(shù)即總數(shù)
Sample Input
Sample Output
//以下表示其中的10種,不需要輸出,輸出總數(shù)即可 Case 1: ****.. ****.. **..** **..** ..**** ..**** Case 2: ****.. ****.. **..** *.*.** .*.*** ..**** Case 3: ****.. ****.. **..** *.*.** ..**** .*.*** Case 4: ****.. ****.. **..** *..*** .**.** ..**** Case 5: ****.. ****.. **..** *..*** ..**** .**.** Case 6: ****.. ****.. **..** .**.** *..*** ..**** Case 7: ****.. ****.. **..** .**.** ..**** *..*** Case 8: ****.. ****.. **..** .*.*** *.*.** ..**** Case 9: ****.. ****.. **..** .*.*** ..**** *.*.** Case 10: ****.. ****.. **..** ..**** **..** ..****
Source
elba
#include#includeusing namespace std; int s,l[7]; void trees(int x,int k1,int k2) { if (l[k1]>1 || l[k2]>1) return;//判斷該列還可不可以插入空格 if (x==6)//退出條件 { s++; return; } l[k1]++; l[k2]++;//該列空格的數(shù)量加1 for (int i=1;i<=5;i++)for (int j=i+1;j<=6;j++)trees(x+1,i,j); l[k1]--; l[k2]--;//回溯 } int main() { for (int i=1;i<=5;i++)for (int j=i+1;j<=6;j++)trees(1,i,j); cout<<s; }題解:
本題有兩種解法,第一種是一個一個格子決定種還是不種,可是這樣時間會比較久,所以我就想到了用八皇后的做法,
for (int i=1;i<=5;i++)
??for (int j=i+1;j<=6;j++)
?? ?trees(x+1,i,j);
首先一行的樹要4顆,這樣循環(huán)會比較麻煩,那么就可以循環(huán)空位的地方,x表示行數(shù),i和j表示空位的位置。然后用變量L表示該列有多少個空位,最多2個。然后當(dāng)列數(shù)到了6行之后就可以退出累加了。
總結(jié)
以上是生活随笔為你收集整理的SSL-练习题目:种树 题解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记本电脑WiFi总是掉笔记本电脑老掉w
- 下一篇: JAM的计数法