這裡的樹指的是一般意義上的樹,即子結點個數不限且沒有先後次序的樹,並不僅僅是二叉樹。
這裡採用的是樹的靜態寫法~
(參考《演算法筆記》)
struct node node[maxn]; //結點陣列
int index = 0;
int newnode(int v)
//樹的先根遍歷
void preorder(int root)
}//樹的層序遍歷
void layerorder(int root)
}}
應用即為pat甲級的一題:
1053 path of equal weight (30分)
#include using namespace std;
#define pb push_back
typedef double db;
typedef long long ll;
typedef vectorvi;
const int inf = 2e9;
const ll inf = 8e18;
const int maxn = 110;
int n, m, s; //結點數、邊數、給定的和
int path[maxn]; //記錄路徑
struct nodenode[maxn];
bool cmp(int a, int b)
//當前訪問結點為index,numnode為當前路徑上結點個數
void dfs(int index, int numnode, int sum)
printf("\n");
return;
} for (int i = 0; i < node[index].child.size(); ++i)
}int main()
int idx, k, tmp;
for (int i = 0; i < m; ++i)
sort(node[idx].child.begin(), node[idx].child.end(), cmp);
} path[0] = 0; //路徑第乙個點為0號結點
dfs(0, 1, node[0].w); //目前已有1個結點
return 0;
}
一般Fibonacci演算法的優化
一般的fibonacci演算法 int fibonacci int number 該演算法的時間複雜度達到了驚人的指數級別,效率慢的不行,下面提供兩種不同的改進方式,時間複雜度分別為o n 和o logn 方法一 o n int fibonacci int number int result 0 f...
一般控制的基本code思路
正好寫到溫控,很麻煩。多個點位間的溫差,感測器故障等等,諸如此類問題。每逢coding都想造輪子,通用的輪子。沉吟之下覺得一般控制都是可以遵循一套基本框架的。所謂控制,不管控制的是什麼,大致流程就是 採集資料 分析資料 結果處理,這一過程的迴圈。這個過程又可以分為兩部分 採集資料和結果處理,及分析資...
通過遞迴演算法完成樹的級聯勾選的一般思路
在某個專案中,發現當tree上加上checkbox後,初始化該樹時會特別慢。現場樹上的節點最深有三層,節點個數總和有200多個。經排查,為該tree的引數中開啟了級聯勾選的引數,導致初始化該樹時每初始化乙個節點便進行了一次級聯判斷,如此效率過低導致。現在將級聯勾選去除後,涉及到如下幾個問題需要解決 ...