如何求樹的直徑我就不說了。
ac此題後有兩點感悟:1. 通過邊集來儲存圖(如何查詢) 2. 先想清楚再編碼,否則會一塌糊塗
/*
* poj-2631
* mike-w
* 2012-10-10
* ******************************
* find the diameter of a tree
*/#include#include#include#define maxsize 11111
#define qsize 22222
#define inf 9999999
#define xdisp_graph
#define xfoo_debug
int maxn;
int edge[maxsize][3], head[maxsize], lsize;
int que[qsize], qhead, qtail, qlen;
int tag[maxsize];
int comp(const void *e1, const void *e2)
int build_graph(void)
} return 0;
}int max(int e1, int e2)
#ifdef disp_graph
int disp_graph(void)
putchar('\n');
return 0;
}#endif
int main(void)
build_graph();
#ifdef disp_graph
disp_graph();
#endif
bfs(edge[0][0]);
maxl=0, maxi=0;
for(i=0; i<=maxn; i++)
if(tag[i]>maxl)
maxl=tag[i], maxi=i;
#ifdef foo_debug
printf("one point of the diameter = %d\n", maxi);
#endif
bfs(maxi);
maxl=0;
for(i=0; i<=maxn; i++)
if(tag[i]>maxl)
maxl=tag[i], maxi=i;
#ifdef foo_debug
printf("the other point of the diameter = %d\n", maxi);
#endif
printf("%d\n", maxl-1);
return 0;
}
poj 2631 求樹上的最大距離 基礎題
求樹上的最大距離 方法 任選一點bfs,求出其他點到此點的最短距離,然後選取距離最大的點 此點為最長路的乙個端點 再做一次bfs,然後選取距離最大的點 此點為最長路的另外乙個端點 二者之間的距離即為樹上的最大距離。code include include include include define...
求樹的直徑
歡迎來踩本人部落格 樹的直徑 就是樹上最長路 方法 求兩邊dfs即可 步驟 1.從任意一點進行dfs,然後找到乙個最長路徑,記錄最遠點u 2.然後從u再進行dfs,找最長路徑,記錄一點v。u,v 就是樹的直徑 第四屆藍橋杯a組 證明 我們可以看出圖中,樹的直徑是 4 2 5 長度為9.我們一開始選定...
求樹的直徑
歡迎來踩本人部落格 樹的直徑 就是樹上最長路 方法 求兩邊dfs即可 步驟 1.從任意一點進行dfs,然後找到乙個最長路徑,記錄最遠點u 2.然後從u再進行dfs,找最長路徑,記錄一點v。u,v 就是樹的直徑 第四屆藍橋杯a組 證明 我們可以看出圖中,樹的直徑是 4 2 5 長度為9.我們一開始選定...