樹的直徑(最遠距離)

2021-08-01 13:44:51 字數 1265 閱讀 5073

輸入資料

5 51 2 2

2 4 3

2 5 1

4 5 4

1 3 5

有5個點5條邊

第一次bfs從1號點開始找到最遠距離3號距離為5

第二次bfs從3號點開始找最遠距離點10

#include#include#include#define max 100000

using namespace std;

int head[max];

int vis[max];//標記當前節點是否已經用過

int dis[max];//記錄最長距離

int n,m,ans;

int sum;//記錄最長路徑的長度

int aga;

struct node

edge[max];

void add(int u,int v,int w)//向鄰接表中加邊

void getmap()

}void bfs(int beg)

{ queueq;

//dis記錄權值

//vis標記已訪問

memset(dis,0,sizeof(dis));

memset(vis,0,sizeof(vis));

int i,j;

while(!q.empty())

q.pop();

aga=beg;

sum=0;

vis[beg]=1; //標記起始點已經到達了

q.push(beg); //把起點放入佇列

int top;

while(!q.empty())

{top=q.front();//獲取對頭點

q.pop();

for(i=head[top];i!=-1;i=edge[i].next) //從起點top出發

{if(!vis[edge[i].v])

{//記錄到達相應點的 權值,標記相應點已訪問,將到達的

//點送入佇列,更新最大sum,更新點aga

dis[edge[i].v]=dis[top]+edge[i].w; //到達v點的權值

vis[edge[i].v]=1; //標記已到到的點

q.push(edge[i].v);//已到達入棧

if(sum

樹上最遠距離練習

從二叉樹的節點a出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點b時,路徑上的節點數叫作a到b的距離。對於給定的一棵二叉樹,求整棵樹上節點間的最大距離。給定乙個二叉樹的頭結點root,請返回最大距離。保證點數大於等於2小於等於500.對於給定的節點root,最遠距離只可能來自以下三種情...

最遠距離(C 實現)

給定一組點 x,y 求距離最遠的兩個點之間的距離。輸入 第一行是點數n n大於等於2 接著每一行代表乙個點,由兩個浮點數x,y組成。輸出 輸出一行是最遠兩點之間的距離。樣例輸出 6 34.0 23.0 28.1 21.6 14.7 17.1 17.0 27.2 34.7 67.1 29.3 65.1...

樹上最遠距離 後序遍歷

從二叉樹的節點a出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點b時,路徑上的節點數叫作a到b的距離。對於給定的一棵二叉樹,求整棵樹上節點間的最大距離。給定乙個二叉樹的頭結點root,請返回最大距離。保證點數大於等於2小於等於500.思路 修改後序遍歷 對於給定的節點root,最遠距離...