0
假設有節點作爲陣列和無向邊作爲載體是這樣的:從節點陣列和邊緣向量中獲取所有子樹的最有效方法是什麼?
int nodes[n] = {1, 2, 3, ... ,n };
vector<pair<int, int>> edges;
edges.push_back(std::make_pair(0, 2));
edges.push_back(std::make_pair(2, 4));
其中陣列中的每個元素是值和n
是陣列的數目。遵循上面的代碼,有兩條邊。一個是從0到2.另一個是從2到4.這些數字表示數組的索引。在這種情況下,最大子樹的大小爲3,即0-2-4,最小子樹的大小爲1。
我解決了這個象下面這樣:
- 排序
edges
矢量 - 選擇在
edges
- 重複2一次置換,直到尋求所有可能的情況下
但是我不知道這是高效的方式。 如何獲取問題域中的所有子樹?有沒有一般的和有效的方法?
我誤解了這個問題,並刪除了我的答案。爲了生成所有對,你的算法看起來很好。想想如何使選擇部分更有效率。您可以使用哈希映射來跟蹤當前子樹中的哪些節點更有效地添加邊。 – therainmaker