推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

树的直径与树上路径问题

更新时间:2026-10-18 11:45:48 大小:38K 上传用户:烟雨查看TA发布的资源 标签:树的直径树上路径BFSDFS树形DP 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

树的直径与树上路径问题 一、树的直径问题 树的直径是树中最远两个节点之间的距离。求树的直径有多种方法。 1.1 两次BFS/DFS法 // 思路// 1. 从任意节点u出发BFS/DFS,找到最远节点v// 2. 从v出发BFS/DFS,找到最远节点w// v到w的距离就是树的直径int bfsFindFarthest(int start, int n) { // 返回最远节点的距离和节点 int dist[MAXN] = {0}; int queue[MAXN]; int front = 0, rear = 0; queue[rear++] = start; while (front < rear) { int u = queue[front++]; for (每个邻接点v) { if (!dist[v] && v != start) { dist[v] = dist[u] + 1; queue[rear++] = v; } } } // dist最大的节点就是最远节点 return farthestNode;} 1.2 树形DP法 int diameter = 0;int dfsDiameter(int u, int parent) { int max1 = 0, max2 = 0; // 两个最长的向下路径 for (每个子节点v of u) { if (v == parent) continue; int len = dfsDiameter(v, u) + 1; if (len > max1) { max2 = max1; max1 = len; } else if (len > max2) { max2 = len; } } // 经过u的直径 = 两条最长向下路径之和 diameter = (diameter > max1 + max2) ? diameter : max1 + max2; return max1; // 返回最长向下路径} 树形DP法复杂度O(n)

部分文件列表

文件名 大小
树的直径与树上路径问题.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载