問題描述:
如下圖是由14個「+」和14個「-」組成的符號三角形, 2個同號下面都是「+」,2個異號下面都是「-」。
- + + - + + +
- + - - + +
- - + - +
+ - - -
- + +
- +
- 在一般情況下,符號三角形的第一行有n個符號, 符號三角形問題要求對於給定的n,
計算有多少個不同的符號三角形,使其所含的「+」和「-」的個數相同。
解題思路:
1、不斷改變第一行每個符號,搜尋符合條件的解,可以使用遞迴回溯
為了便於運算,設+ 為0,- 為1,這樣可以使用異或運算子表示符號三角形的關係
++為+即0^0=0, --為+即1^1=0, +-為-即0^1=1, -+為-即1^0=1;
2、因為兩種符號個數相同,可以對題解樹剪枝,
當所有符號總數為奇數時無解,當某種符號超過總數一半時無解
#include#includeusing namespace std;
int map[1100][1100];
int n,ans,sum,cnt;//cnt用於統計-號個數
//"+" 是0,」-「是1
void dfs(int step,int cnt)//第一行所在的列數
dfs(1,0);
cout<
#include#includeusing namespace std;
int p[1001][1001];
int sum;
int n;
int half;
int cnt;
void dfs(int t)
{ if((cnt>half)|| ((t*(t-1)/2-cnt)>half) )return;
if(t>n)
{ for(int i=1;i<=n;i++)
{ for(int j=n+1-i;j>=1;j--)
if(p[i][j]==1)cout<<"+ ";
else cout<<"- ";
cout<>n;
if((n*(n+1)/2)&1)
{ cout<
符號三角形問題
符號三角形問題 右圖所示的三角形中,有14個 和14個 2個同號下面是 兩個異號下面是 在一般情況下,符號三角形的第一行有n個符號。符號三角形問題,要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 相同。解 首先要求產生的 與 的數量一樣多,所以當給定的n不能滿足 n 1 n 4 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...