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;
        }
    
    }
    
    
  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/doragd/p/11269755.html
Copyright © 2011-2022 走看看