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(); }
上面 "尝试当前结点" 是通过临时数组实现的,也就是每枚举一个元素,我先加到数组里,如果不满足条件再从数组中移出去
第三部分输出略