輸入資料
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,最遠距離...