1.在排序那遇到了问题,参照https://blog.csdn.net/baidu_32157201/article/details/51725592这个博客题解的比较函数,即将P【node】这个数组里面的排序 按w数组由大到小的顺序解出 下表相当于一一对应的关系
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m, t;
vector<int> w, path;
vector<vector<int> > P;
int cmp(int a, int b){
return w[a] > w[b];
}
void dfs(int node, int sum)
{
path.push_back(node);
sum += w[node];
if(sum == t){
if(P[node].size() > 0){
return;
}
for(int i=0; i<path.size()-1; i++){
cout << w[path[i]] << " ";
}
cout << w[path[path.size()-1]] << endl;
}
for(int i=0; i<P[node].size(); i++){
dfs(P[node][i], sum);
path.pop_back();
}
}
int main() {
cin >> n >> m >> t;
w.resize(n);
P.resize(n);
for(int i=0; i<n; i++) {
cin >> w[i];
}
for(int i=0; i<m; i++) {
int nd, k;
cin >> nd >> k;
P[nd].resize(k);
for(int j=0; j<k; j++){
cin >> P[nd][j];
}
sort(P[nd].begin(), P[nd].end(), cmp);
}
dfs(0, 0);
return 0;
}