• 树的遍历——A1053.Path of Equal Weight(30) 只可DFS不可BFS


    #include <bits/stdc++.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <queue>
    using namespace std;
    const int MAXN = 110;
    struct Node{
        int weight;
        vector<int> child;
    }Node[MAXN];
    bool cmp(int a,int b){
        return Node[a].weight > Node[b].weight;
    }
    int n,m,S;//结点数,边数及给定的和
    int path[MAXN];//记录路径
    void DFS(int index,int numNode,int sum){
        if(sum > S){
            return;
        }
        if(sum == S){
            if(Node[index].child.size() != 0){
                return;
            }
            for(int i=0;i<numNode;++i){
                printf("%d",Node[path[i]].weight);
                if(i < numNode-1){
                    printf(" ");
                }else{
                    printf("
    ");
                }
            }
            return;
        }
        for(int i=0;i<Node[index].child.size();++i){
            int child = Node[index].child[i];
            path[numNode] = child;
            DFS(child,numNode+1,sum + Node[child].weight);
        }
    }
    int main(){
        scanf("%d%d%d",&n,&m,&S);
        for(int i=0;i<n;++i){
            scanf("%d",&Node[i].weight);
        }
        int id,k,child;
        for(int i=0;i<m;++i){
            scanf("%d%d",&id,&k);
            for(int j=0;j<k;++j){
                scanf("%d",&child);
                Node[id].child.push_back(child);
            }
            sort(Node[id].child.begin(),Node[id].child.end(),cmp);
        }
        path[0] = 0;//路径的第一个节点设置为0号节点
        DFS(0,1,Node[0].weight);
        system("pause");
        return 0;
    }
  • 相关阅读:
    .hpp文件
    最小高度的BST
    检查图中的有向路径
    c++ 对象内存布局详解
    链表求差
    offer--链表反转和从尾到头打印链表
    平衡二叉树的判断
    java 抽象类和接口
    原型模式--prototype
    装饰模式decorator
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12237200.html
Copyright © 2020-2023  润新知