PAT程序设计考题——甲级1053( Path of Equal Weight) C++实现

#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
int s;
struct node{//注意为什么才用先更遍历 是因为到达某个节点之后就要停止,接下来的深度就不再返回i
 int weight;
 vector<int> child;
};
vector<node> tree;
bool cmp(int a,int b)
{
 return tree[a].weight>tree[b].weight;
}
int path[maxn];
void DFS(int index,int nodenum,int sum)//注意这边球的是根到所有叶子结点的路径
{
 if(sum>s) return;
 if(sum==s)
 {
  if(!tree[index].child.empty()) return;
  else
  {
   for(int i=0;i<nodenum;i++)
   {
    cout<<tree[path[i]].weight;
    if(i<nodenum-1) cout<<" ";
    else cout<<endl;
   }
 }
  return;
 }
 for(int i=0;i<tree[index].child.size();i++)
 { int child=tree[index].child[i];//注意这边保存路径的方法,保存的是孩子节点 根节点要初始化  sun也要初始化
 path[nodenum]=child;
 DFS(child,nodenum+1,sum+tree[child].weight);//注下一个节点不是index+1
 }
 }
int main()
{ int nodenum,nleaf;
cin>>nodenum>>nleaf>>s;
for(int i=0;i<nodenum;i++)
{
 int weight;
 node temp;
 cin>>temp.weight;
 tree.push_back(temp);
}
int start;
int end;
for(int i=0;i<nleaf;i++)
{ int id;
int num;
cin>>id>>num;
for(int j=0;j<num;j++)
{
 int child;
 cin>>child;
 
 tree[id].child.push_back(child);
}
sort(tree[id].child.begin(),tree[id].child.end(),cmp);//为了满足输出要求  只能改变孩子不能改变tree
}
//for(int i=0;i<tree.size();i++)
//cout<<tree[i].weight<<",";
path[0]=0;
DFS(0,1,tree[0].weight);
 return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值