标签:
1 struct stu 2 { 3 int from,to,val,next; 4 }st[M]; //定义结构体储存节点和节点间的距离以及下一个节点的位置 5 6 7 void init() 8 { 9 num=0; 10 memset(head,-1,sizeof(head)); 11 } //初始化函数 12 13 14 void add_edge(int u,int v,int w) 15 { 16 st[num].from=u; //储存节点u 17 st[num].to=v; //储存节点v 18 st[num].val=w; //储存节点u与v的距离 19 st[num].next=head[u]; //储存下一个与节点u相连的节点的位置 20 head[u]=num++; //储存u节点的位置 21 } 22 23 24 void bfs(int fir) //搜索函数 25 { 26 ans=0; 27 int u; 28 memset(sum,0,sizeof(sum)); //以该节点结尾的最长路 29 memset(flag,0,sizeof(flag));//标记被访问的节点 30 queue<int>que; 31 que.push(fir); 32 flag[fir]=1; 33 while(!que.empty()) 34 { 35 36 u=que.front(); 37 que.pop(); 38 for(i = head[u] ; i != -1 ; i=st[i].next) 39 { 40 if(!flag[st[i].to] && sum[st[i].to] < sum[u]+st[i].val) 41 { 42 sum[st[i].to]=sum[u]+st[i].val; 43 if(ans < sum[st[i].to]) 44 { 45 ans=sum[st[i].to]; //记录最大距离 46 node=st[i].to; //记录端点 47 } 48 flag[st[i].to]=1; 49 que.push(st[i].to); 50 } 51 } 52 } 53 } 54 55 假设从节点1开始,找到节点u使得1到u的距离最大,那么节点u到树上其他节点的最大距离就是树的直径(树上两点间的最大距离)
标签:
原文地址:http://www.cnblogs.com/yexiaozi/p/5730232.html