問題描述:
如下三角形:
+
+
-
+
-
+
+
+
-
-
-
-
+
-
+
+
+
-
-
+
+
-
-
+
-
-
-
+
是由14個「+
」號和14個「-
」號組成的符號三角形,兩個同號下面都是+
號, 兩個異號下面都是-
號。在一般情況下,符號三角形的第一行有n個符號。符號三角形問題要求對於給定的n, 計算有多少個不同的符號三角形,使其所含的+
的個數和-
的個數相同。
使用回溯法解決此問題:
**如下:
#include
#define max_v 100
using
namespace std;
/** * max : 當前 + 的個數
* sum : 已經發現的符合題設的排列個數,即解的個數
* tri : 儲存符號
* i : 當前回溯層次,從0開始
* n : 符號三角形第一行個數
*/void
done
(int max,
int& sum,
int tri[max_v]
[max_v]
,int i,
int n)
//剪枝: 如果提前發現正或負的個數大於總個數的一半,則不用繼續遞迴
if(max > half ||
(i)*
(i +1)
/2- max > half)
//如果 i > n 則說明遞迴結束
if(i >= n)
for(
int a =
0; a <
2; a++
)done
(max + s, sum, tri, i +
1, n);}
}int
main()
執行結果:
符號三角形問題
符號三角形問題 右圖所示的三角形中,有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...