7-3 符号三角形 (10 分)(思路+详解)
生活随笔
收集整理的這篇文章主要介紹了
7-3 符号三角形 (10 分)(思路+详解)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目 Come 寶 !!!
輸入格式:
第一行符號個數n
輸出格式:
符合要求的三角形個數
輸入樣例:
4結尾無空行
輸出樣例:
二:思路
思路:
1.如果我們確立的第一行的符號是什么 ,那么我們就可以基本上確定我們的符號三角形是什么
因為當第一行確定的時候,那么接下來的行就是按照同號為’+’ ,異號為’-’,來填寫
2.在這里我們選擇的解的空間是子集樹(因為我們樹每次要么是’-’,要么就是’+’)
3.具體步驟
1>:遞歸函數的參數
backtacking()
2>:輸出的 結果
vector<vector > ans;用來存每次的可行解
vector path; 用來記錄一次的可行解
3>:橫向單層for循環 和 縱向的遞歸
橫向的單層for循環為 0 和 1(這里我們用0和1代表’+‘和’-’)
縱向的遞歸為我們的n層結構
4>:遞歸終止條件為path.size() == n
4.當我們求出所有的可行解,我們要對其做出處理,因為我們只是窮舉了第一行的所有數據
所以我們的得補充完整個二維矩陣的樣子,那么我們補充的原則是,2個同號下面都是“+”,2個異號下面都是“-”。
5.當得到一個完整的圖形后我們要判斷 0 和 1的個數時候相等 ,如果相等則計數,就是符合要求的
符號三角形
6:圖示例
三:上碼
/**思路:1.如果我們確立的第一行的符號是什么 ,那么我們就可以基本上確定我們的符號三角形是什么因為當第一行確定的時候,那么接下來的行就是按照同號為'+' ,異號為'-',來填寫 2.在這里我們選擇的解的空間是子集樹(因為我們樹每次都是'-',要么是'-')3.具體步驟1>:遞歸函數的參數backtacking()2>:輸出的 結果vector<vector<string> > ans;用來存每次的可行解vector<int> path; 用來記錄一次的可行解 3>:橫向單層for循環 和 縱向的遞歸橫向的單層for循環為 0 和 1(這里我們用0和1代表'+'和'-')縱向的遞歸為我們的n層結構 4>:遞歸終止條件為path.size() == n4.當我們求出所有的可行解,我們要對其做出處理,因為我們只是窮舉了第一行的所有數據所以我們的得補充完整個二維矩陣的樣子,那么我們補充的原則是,2個同號下面都是“+”,2個異號下面都是“-”。5.當得到一個完整的圖形后我們要判斷 0 和 1的個數時候相等 ,如果相等則計數,就是符合要求的符號三角形 **/ #include<bits/stdc++.h> using namespace std;vector<vector<int> > ans; vector<int> path; int N;void backtacking(){if (path.size() == N) {ans.push_back(path);return;}for (int i = 0; i <= 1; i++) {path.push_back(i);backtacking();path.pop_back();} } int main(){int count = 0;cin >> N;backtacking();for (int i = 0; i < ans.size(); i++) {int array[N][N];//將每一次的可行解建立一個二維矩陣 memset(array, -1, sizeof(array));//初始化為-1; for (int j = 0; j < N; j++) {array[0][j] = ans[i][j];}for (int k1 = 1; k1 < N; k1++) {for (int k2 = 0; k2 < N - k1; k2++) {// N - k1 :因為這里是逐層遞減的 if (array[k1-1][k2] == array[k1-1][k2+1]) { //上一行的符號相同 array[k1][k2] = 0; //這里我們用0和1代表'+'和'-'}else{array[k1][k2] = 1;}}}int cnt1 = 0;int cnt2 = 0;for (int k3 = 0; k3 < N; k3++) {for (int k4 = 0; k4 < N; k4++) {if (array[k3][k4] == 0) {cnt1++;}if (array[k3][k4] == 1){cnt2++;}// cout << array[k3][k4] << ' '; } // cout << endl;}if (cnt1 == cnt2) {count++;}// cout << endl;} cout << count; }寶!!!我再嘮叨一句 記得 加油喲!!!!! 沖!!!!!!!!!!!!!!!!!!!!!
總結
以上是生活随笔為你收集整理的7-3 符号三角形 (10 分)(思路+详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-2 批处理作业调度 (10 分)(思
- 下一篇: 如何使用aftereffect制作雨中的