一、问题理解 牛客25606题要求我们计算树结构中的最优解,这个问题可以转化为寻找树的最长路径(直径)问题。通过DFS遍历树结构,我们可以高效地解决这类典型的图论问题。 二、算法核心思想三、完整代码实现(带注释)
- #include <iostream>
- #include <vector>
- using namespace std;
- vector<vector<int>> graph;
- vector<bool> visited;
- int max_depth = 0;
- void dfs(int node, int depth) {
- visited[node] = true;
- max_depth = max(max_depth, depth);
-
- for (int neighbor : graph[node]) {
- if (!visited[neighbor]) {
- dfs(neighbor, depth + 1);
- }
- }
- }
- int main() {
- int N;
- cin >> N;
- graph.resize(N + 1);
- visited.resize(N + 1, false);
-
- for (int i = 0; i < N - 1; ++i) {
- int X, Y;
- cin >> X >> Y;
- graph[X].push_back(Y);
- graph[Y].push_back(X);
- }
-
- dfs(1, 0);
- cout << 2 * (N - 1) - max_depth << endl;
- return 0;
- }
复制代码
关键知识点
来源:牛客25606题解:DFS计算树结构最优解
|