符號三角形問題

2021-10-01 05:33:10 字數 1499 閱讀 2230

如下圖是由14個「+」和14個「-」組成的符號三角形, 2個同號下面都是「+」,2個異號下面都是「-」。

1 - + + - + + +

2 - + - - + +

3 - - + - +

4 + - - -

5 - + +

6 - +

7 -在一般情況下,符號三角形的第一行有n個符號, 符號三角形問題要求對於給定的n, 計算有多少個不同的符號三角形,使其所含的「+」和「-」的個數相同。 這是在書本中回溯裡的一道題目,回溯約等於深度優先搜尋

回溯的大概:如果一種情況可能,繼續往下遞迴直到邊界;如果超出了限定條件就剪枝,所以能一直遞迴到邊界的一定是未被剪枝也就是符合條件的情況,即答案。

在這道題當中,可以得到限制:== 「+」,「-」數量相等,總數量為偶數。==

並且當三角形的第一行確定後,整個三角形也可以確定。所以方法就是嘗試第一行的內容,通過剪枝、遞迴得到答案。

暈了,這咋這麼大

上圖就是它遞迴的大概,每次新加乙個點,都會斜著新加一排。

注意! 每次新加的點都要分為兩種情況:+ 和 -;

下面是**:

#include

using namespace std;

int n;

int half;

int sum;

int count;

//1代表+ ; 0代表- ; count就是+的計數

int p[

100]

[100];

void

dfs(

int t)

;int

main()

half =

(n+1

)* n /4;

// + 和 - 都不能超過half

sum =0;

//答案數初始化;

count =0;

dfs(0)

;printf

("%d"

,sum)

;return0;

}void

dfs(

int t)

//第t步,也就是第一行的第t位

//如果還有位子,乙個位子要嘗試 + - 兩種情況

for(

int i =

0; i <

2; i++)if

(count <= half &&

(t+2)*

(t+1)/

2- count <= half)

//當前圖形中+ -都沒超過一半

//還原本次,考慮下乙個符號

for(

int j =

1; j <= t; j++)

count -

= i;

}}

符號三角形問題

符號三角形問題 右圖所示的三角形中,有14個 和14個 2個同號下面是 兩個異號下面是 在一般情況下,符號三角形的第一行有n個符號。符號三角形問題,要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 相同。解 首先要求產生的 與 的數量一樣多,所以當給定的n不能滿足 n 1 n 4 0的...

符號三角形問題

輸入 n 1輸出不同方案的個數.注意 純打表必和諧掉,不信就試試 有限打表,測試輸入 期待的輸出 時間限制 記憶體限制 額外程序 測試用例 1 以文字方式顯示 2 3 以文字方式顯示 0 4 1秒64m 0 include include includeusing namespace std int...

符號三角形(dfs)

問題描述 如下圖是由14個 和14個 組成的符號三角形,2個同號下面都是 2個異號下面都是 在一般情況下,符號三角形的第一行有n個符號,符號三角形問題要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。解題思路 1 不斷改變第一行每個符號,搜尋符合條件的解,可以使用遞迴回溯 ...