Dynamic Collection of TreesThe data type tree_collection represents a collection of vertex disjoint rooted trees. Each vertex has a double valued cost and contains information of an arbitrary type I. This data type has probably no direct use in application programs. It can be used as a building block for other data types. ExampleThe following program shows how tree_collection can be used in a program.
#include <LEDA/core/tree_collection.h>
using namespace leda;
int main()
{
tree_collection<int> D;
//generate 6 trees containing a single vertex
d_vertex dv1=D.maketree(1);d_vertex dv2=D.maketree(2);
d_vertex dv3=D.maketree(3);d_vertex dv4=D.maketree(4);
d_vertex dv5=D.maketree(5);d_vertex dv6=D.maketree(6);
D.link(dv1,dv2); //combine the trees dv1 and dv2:
// dv2
// /
// dv1
D.link(dv3,dv4); //combine the trees dv3 and dv4:
// dv4
// /
// dv3
D.link(dv4,dv2); //combine the trees of dv4 and dv2:
// dv2
// / \
// dv1 dv4
// \
// dv3
D.link(dv6,dv2); //combine the trees of dv6 and dv2:
// dv2
// / | \
// dv1 dv4 dv6
// |
// dv3
D.cut(dv4); //cut subtree with root dv4:
// dv2
// / \
// dv1 dv6 dv4
// |
// dv3
D.link(dv4,dv6); //combine the trees of dv4 and dv6:
// dv2
// / \
// dv1 dv6
// |
// dv4
// |
// dv3
//compute different functions on D
std::cout << "Parent of " << D.inf(dv3)
<< " is " << D.inf(D.parent(dv3)) << std::endl;
std::cout << "Root of " << D.inf(dv3)
<< " is " << D.inf(D.findroot(dv3)) << std::endl;
double x;
std::cout << "Findcost(" << D.inf(dv4) << ")="
<< D.inf(D.findcost(dv4,x)) << std::endl;
return 0;
}
|
See also: |