求樹的直徑(BFS/DFS)
樹的直徑概念:一顆樹上存在的最長路徑。
推導過程請參考:https://blog.csdn.net/enjoying_science/article/details/44962389
程式碼如下(BFS版):
#include<iostream>
#include<stdio.h>
#include<map>
#include<vector>
#include<set>
#include<cstdlib>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<cmath>
#define MAXN 5000000
#define LL long long
#define EPS 1e-9
using namespace std;
struct Edge{
int to;
int next;
int w;
}e[MAXN];
int tot,n,max_num,u,v,mst,med;
int dis[MAXN];
bool vis[MAXN];
int head[MAXN];
void init()
{
tot=0;
for(int i=1;i<=n;i++)
{
head[i]=-1;
}
}
void add(int from,int to,int w)
{
e[tot].to=to;
e[tot].w=w;
e[tot].next=head[from];
head[from]=tot++;
}
int maxd;
void bfs(int st)
{
queue<int>q;
int i,now,next;
memset(vis,false,sizeof(vis));
memset(dis,0,sizeof(dis));
vis[st]=true;
q.push(st);
maxd=0;
dis[st]=0;
while(!q.empty())
{
now=q.front();
q.pop();
for(i=head[now];i!=-1;i=e[i].next)
{
int v=e[i].to;
if(!vis[v])
{
vis[v]=true;
dis[v]=e[i].w+dis[now];
if(maxd<dis[v])
{
max_num=v;
maxd=dis[v];
}
q.push(v);
}
}
}
}
int main()
{
while(cin>>n)
{
if(n==1) {
cout<<"0";break;}
init();
for(int i=1;i<=n-1;i++)
{
cin>>u>>v;
add(u,v,1);
add(v,u,1);
}
bfs(1);
mst=max_num;
bfs(mst);
cout<<maxd+1<<endl;
}
return 0;
}
程式碼如下(DFS(2次)版):
相關文章
- Cow Marathon(BFS求數的直徑)
- leetcode 每日一題 543 二叉樹的直徑 dfs方法LeetCode每日一題二叉樹
- 樹的直徑
- DAG bfs + dfs 126,
- D48 樹的直徑 P3304 [SDOI2013] 直徑
- 求最短路徑——DFS+Floyd演算法演算法
- 演算法筆記 - 樹的直徑演算法筆記
- Day4 樹的直徑、重心以及基環樹
- 速記圖的遍歷(DFS和BFS)
- 聊聊演算法——BFS和DFS演算法
- 樹的DFS序
- DFS樹
- 藍橋杯-迷宮(BFS+DFS)
- 【模板題】 543. 二叉樹的直徑二叉樹
- 小A與尤拉路(牛客-樹的直徑)
- 【Codeforces1404B】Tree tag | 樹上追擊、博弈、樹的直徑
- 從 dfs 序求 lca 到虛樹到樹分塊 學習筆記筆記
- BFS求無權圖的單源最短路徑-鄰接矩陣儲存矩陣
- LeetCode第 543 題:二叉樹的直徑(C++)LeetCode二叉樹C++
- JAVA圖搜尋演算法之DFS-BFSJava演算法
- 樹的DFS序列,時間戳,樹的深度,重心時間戳
- CF 1805 D. A Wide, Wide Graph (*1800) 思維 + 樹的直徑IDE
- D49 樹的直徑 P2491 [SDOI2011] 消防
- leetcode刷題記錄:演算法(六)BFS&DFSLeetCode演算法
- LeetCode C++ 1302. Deepest Leaves Sum【Tree/BFS/DFS】中等LeetCodeC++
- D52 樹的直徑+貪心 CF911F Tree DestructionStruct
- D50 樹的直徑 P3629 [APIO2010] 巡邏API
- L2-006 樹的遍歷(BFS)
- 深度DFS 和 廣度BFS搜尋演算法學習演算法
- 【演算法】二叉樹、N叉樹先序、中序、後序、BFS、DFS遍歷的遞迴和迭代實現記錄(Java版)演算法二叉樹遞迴Java
- DFS與BFS——理解簡單搜尋(中文虛擬碼+例題)
- DFS在二叉樹上的表現二叉樹
- bzoj3439: Kpm的MC密碼(主席樹+DFS序+字典樹)密碼
- 【題解】Solution Set - NOIP2024集訓Day10 樹的直徑、重⼼、中⼼
- 【力扣】島嶼數量(體會一下dfs和bfs思路的實質)力扣
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- dfs列印有向圖的起點到終點路徑
- 樹7 堆中的路徑