题目链接
这里不是二叉树,所以要用vector容器保存子树的编号
这里用数组的方式实现,如果想用链表的方式实现,就要建立一个指针类型的数组,不过是比较麻烦的
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
struct MyStruct
{
int value;
vector<int>child;
};
MyStruct node[1010];
int path[1010], s, m, n;
bool cmp(int a, int b) {
return node[a].value > node[b].value;
}
void dfs(int index, int numnode, int sum) {
if (sum > s) {
return;
}
if (sum == s) {
if (node[index].child.size()) {
return;
}
for (int i = 0; i < numnode; i++) {
cout << node[path[i]].value;
if (i < numnode-1) {
cout << " ";
}
}
cout << endl;
return;
}
for (int i = 0; i < node[index].child.size(); i++) {
int child = node[index].child[i];
path[numnode] = child;
dfs(child, numnode + 1, sum + node[child].value);
}
}
int main()
{
cin >> n >> m >> s;
for (int i = 0; i < n; i++) {
cin >> node[i].value;
}
int id, k, child;
for (int i = 0; i < m; i++) {
cin >> id >> k;
for (int j = 0; j < k; j++) {
cin >> child;
node[id].child.push_back(child);
}
sort(node[id].child.begin(), node[id].child.end(), cmp);
}
path[0] = 0;
dfs(0, 1, node[0].value);
return 0;
}