处理dfs的时候一般需要考虑边界问题,即大于小于等于,同时需要注意入口处,应该怎么处理
#include<cstdio>
#include<iostream>
#include<stack>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=101;
int n,m,s,w;
struct node
{
vector<int> child;
int weight;
}a[maxn];
int path[maxn];
bool cmp(int b,int c)
{
return a[b].weight>a[c].weight;
}
void DFS(int depth,int nowW,int index)
{
if(nowW>s)
return;
if(nowW==s)
{
if(a[index].child.size()!=0)
return ;
else
for (int i=0;i<depth;i++)
{
printf("%d",path[i]);
if(i!=depth-1)
printf(" ");
else
printf("\n");
}
return;
}
for(int i=0;i<a[index].child.size();i++)
{
int child=a[index].child[i];
path[depth]=a[child].weight;
DFS(depth+1,nowW+a[child].weight,child);
}
}
int main()
{
int father,child,num;
cin>>n>>m>>s;
for(int i=0;i<n;i++)
{
scanf("%d",&w);
a[i].weight=w;
}
for(int i=0;i<m;i++)
{
scanf("%d %d",&father,&num);
for(int j=0;j<num;j++)
{
scanf("%d",&child);
a[father].child.push_back(child);
}
sort(a[father].child.begin(),a[father].child.end(),cmp);
}
path[0]=a[0].weight;
DFS(1,a[0].weight,0);
}