关于最小生成树中的路径及遍历
Posted -hhs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于最小生成树中的路径及遍历相关的知识,希望对你有一定的参考价值。
对于一颗生成树来说,我们生成的过程是一条边一条边的增加的,所以我们只需要建立一个数组path[]来记录我们都选择了那些边,之后使用path[]来建边遍历。
记录部分:
void Kruskal() int num=0,j=0; for(int i=1;i<=n;++i) f[i]=i; for(int i=1;i<=m;++i) int eu=find(edge[i].from); int ev=find(edge[i].to); if(eu^ev) f[eu]=ev; path[++j]=edge[i]; num++; if(num==n-1) break; final=j;
遍历部分:
for(int i=1;i<=final;++i) addedge(path[i].from,path[i].to),addedge(path[i].to,path[i].from); vis[1]=1; get_col(1,1); void get_col(int x,int c) col[x]=c; for(int i=head[x];i;i=_edge[i].next) if(!vis[_edge[i].to]) vis[_edge[i].to]=1; get_col(_edge[i].to,c^1); void addedge(int from,int to) _edge[++num_edge].from=from; _edge[num_edge].to=to; _edge[num_edge].next=head[from]; head[from]=num_edge;
以上是关于关于最小生成树中的路径及遍历的主要内容,如果未能解决你的问题,请参考以下文章