zoukankan      html  css  js  c++  java
  • PAT A1053 Path of Equal Weight [树的DFS遍历]

    题目描述

    链接
    给出树的结构和权值,找从根结点到叶子结点的路径上的权值相加之和等于给定目标数的路径,并且从大到小输出路径

    分析

    • 静态数组建树
    • dfs遍历:注意什么地方要回溯状态
    • 二维数组排序,基本用vector实现,记住以后写begin和end了!如果用vector的话
    bool cmp(vector<int> a, vector<int> b){
        int len = min(a.size(),b.size());
        for(int i=0;i<len;i++){
            if(a[i] == b[i]) continue
        }
    }
    sort(ans.begin(), ans.end(), cmp);
    
    • 当然最后这里还是用了一维数组排序,因为有个点过不了,很奇怪
    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 105;
    struct node{
        int w;
        vector<int> child;
    }nodes[maxn];
    
    bool cmp(int a, int b){
        return nodes[a].w > nodes[b].w;
    }
    
    int n,m,s,k,id;
    
    int sum;
    vector<vector<int> > ans;
    vector<int> path;
    void dfs(int i){
        path.push_back(nodes[i].w);
        sum += nodes[i].w;
        if(nodes[i].child.size()==0){
            if(sum == s){
                ans.push_back(path);
            }
            path.pop_back();
            sum -= nodes[i].w;
            return;
        }
        for(int j=0;j<nodes[i].child.size();j++){
            dfs(nodes[i].child[j]);
        }
        path.pop_back();
        sum -= nodes[i].w;
    }
    
    
    int main(){
        cin>>n>>m>>s;
        for(int i=0;i<n;i++){
            cin>>nodes[i].w;
        }
        for(int i=0;i<m;i++){
            cin>>id>>k;
            for(int j=0;j<k;j++){
                int tmp;
                cin>>tmp;
                nodes[id].child.push_back(tmp);
            }
            sort(nodes[id].child.begin(), nodes[id].child.end(), cmp);
        }
        dfs(0);
        for(int i=0;i<ans.size();i++){
            for(int j=0;j<ans[i].size();j++){
                if(j==0) cout<<ans[i][j];
                else cout<<" "<<ans[i][j];
            }
            cout<<endl;
        }
    
    }
    
    
  • 相关阅读:
    JAVA调用WCF
    写代码之前要做什么?
    漫谈界面和数据
    UIButton 简易的UI
    数据结构利器之私房STL(中)
    有趣的位运算
    基于TCP的C/S初级网络编程1
    数据结构利器之私房STL(上)
    Unix/Linux 那些系统启动后的进程
    【字符串匹配】KMP算法之道
  • 原文地址:https://www.cnblogs.com/doragd/p/11269755.html
Copyright © 2011-2022 走看看