符號三角形問題

2021-07-25 14:24:34 字數 981 閱讀 3954

符號三角形問題

右圖所示的三角形中,有14個「+「和14個「-」。2個同號下面是+,兩個異號下面是-。

在一般情況下,符號三角形的第一行有n個符號。符號三角形問題,要求對於給定的n,計算有多少個不同的符號三角形,使其所含的「+」和「-」相同。

解: 首先要求產生的『+』與『-』的數量一樣多,所以當給定的n不能滿足(n+1)*n%4==0的話一定不能構成符號三角形 

其次明確三角形的產生情況取決於第一行的『+』、『-』號的情況

所以在解決此題的過程中需要進行第一行的構造,以此產生後面幾行的結果

構造第一行的過程中,從第乙個到最後乙個依次構造

此時使用p來儲存三角形,當p[i][j]=1時代表此處為『+』號,反之亦然

在構造三角形的過程中將『+』號的數量進行統計(因為p[i][j]為0,1所以直接加上就可以)。

在構造第一行的過程中是通過每次新增一位來進行,當第一行 新增一位的時候,

整個三角形就會 新增一行,而且剩餘的幾行都會新增一位 

因此回溯的傳遞引數代表了第一行此時要構造的下標從0開始,n-1為最後一位。

當t==n時所有構造完成即到達解空間。

#include int n;

int half,count,sum;

int p[100][100];

void dfs(int t)

//當沒有達到最後一位時

for(int i=0;i<2;i++)

if(count<=half&&(t+1)*(t+2)/2-count<=half)

//滿足條件的時候進行第一行下一位即第t+1位的構造

dfs(t+1);

for(int j=1;j<=t;j++)

count-=p[j][t-j];

count-=i; }}

int main()

return 0;

}

符號三角形問題

如下圖是由14個 和14個 組成的符號三角形,2個同號下面都是 2個異號下面都是 1 2 3 4 5 6 7 在一般情況下,符號三角形的第一行有n個符號,符號三角形問題要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。這是在書本中回溯裡的一道題目,回溯約等於深度優先搜尋 回...

符號三角形問題

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

符號三角形(dfs)

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