A1053 Path of Equal Weight (30 分)

题目大概是打印符合条件的,从根 -> 叶子的路径的权值

 

我的思路大概是:DFS() 从根遍历到叶子,同时记录权值

1、因为要遍历同时记录权值,所以当前结点需要有变量能记录权值(从根到当前结点的累加权值),所以结构体看起来像这样:

struct node_t {
    int weight;
    int total_weight;//记录遍历到当前这个结点时累加的权值
    vector<int> child;//对于一般树由于不知道孩子有多少,所以用 vector 比较节约空间
};

2、思路的伪码大致长这样:

/* 伪码 */

//1. 输入
//保存树结构

//2. 主逻辑
dfs();

//3. 输出

 

对于第一部分输入——保存树结构,将树组织成二维数组较合适;

对于第二部分 dfs() 套晴神的模板,具体地方自己改改就行,最后看起来像这样:

/* 伪码 */

void dfs(树的结点 t, 上一层累加的权值 w) {
    node_t *cur = t;
    
    //尝试当前结点
    temp.push_back(cur);
    cur->total_weight = w + cur->weight;
    if (cur->total_weight == s) {
        输出 temp;
    }

    //遍历当前结点的孩子(如果有的话)
    for (i 从 0 至 cur.size())    dfs(&cur->child[i], cur->total_weight);
    temp.pop_back();
}

上面 "尝试当前结点" 是通过临时数组实现的,也就是每枚举一个元素,我先加到数组里,如果不满足条件再从数组中移出去

第三部分输出略

 

点击获取完整代码

 
posted @ 2021-02-20 20:31  幼麟  阅读(39)  评论(0编辑  收藏  举报