• 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;
        }
    
    }
    
    
  • 相关阅读:
    PHP设计模式之工厂模式
    ThinkPHP删除栏目(多)
    斐波纳契数列递归和非递归算法
    单链表反转的实现
    找出n个数中最大的k个数
    实验四:掌握Linux系统的构建和调试方法
    npm如何上传自己的包
    简要谈一下部署时候的操作
    sass的基本语法及使用
    this 指向问题
  • 原文地址:https://www.cnblogs.com/doragd/p/11269755.html
Copyright © 2020-2023  润新知