User:CalebKennedy/NewPage

   C++ LabeledGraph      



C++ LabledGraph&lt;VertexType, EdgeType&gt; LabeledGraph is a C++ template class for programming with simple graphs and digraphs. Public methods: Friends:

LabeledGraph constructors & destructor <font face="Courier New"> LabeledGraph(void) LabeledGraph(const unsigned long&, const bool&) LabeledGraph(const LabeledGraph&) ~LabeledGraph(void) The default LabeledGraph constructor creates an undirected graph with default number of vertices (<font face="Courier New">MAXVERT = 1000 ) and zero edges <A name="oper">LabeledGraph operators</A> <font face="Courier New"> LabeledGraph& operator=(const LabeledGraph&) LabeledGraph& operator+=(const LabeledGraph&) LabeledGraph operator+(const LabeledGraph&) const The addition operator performs a <A href="http://mathworld.wolfram.com/GraphUnion.html">graph union</A>. <A name="size">size</A> <font face="Courier New"> unsigned long size(void) const <A name="order">order</A> <font face="Courier New"> unsigned long order(void) const <A name="ges">getEdgeSet</A> <font face="Courier New"> set&lt;edge::type&gt; getEdgeSet(void) const Returns a unique ordered set of edges. The data type named edge::type defines a couple (inherited from std::pair) of vertex pointers and a pointer to their associated edge label (or <A href="http://en.wikipedia.org/wiki/Null_%28computer%29" >NULL</A> if the vertices are not adjacent). The class edge is privately defined within the LabeledGraph class; edge instantiations are therefore not available to the client. <A name="iedge">insertEdge</A> <font face="Courier New"> virtual void insertEdge(const_iterator, const_iterator, EdgeType* const) Inserts a labeled edge between two vertices (pointed to by const_iterators). <A href="http://mathworld.wolfram.com/Multigraph.html">Multigraphs</A> and <A href="http://mathworld.wolfram.com/GraphLoop.html">graph loops</A> are not supported; attempts to construct them will result in errors and program termination. <A name="ivert">insertVertex</A> <font face="Courier New"> virtual const_iterator insertVertex(const_iterator) virtual const_iterator insertVertex(const VertexType&) <A name="dfs">searchDepthFirst</A> <font face="Courier New"> virtual void searchDepthFirst(Pruner&) <A href="http://openwetware.org/wiki/User:CalebKennedy/Pruner">Pruner</A> is an abstract template <A href="http://www.tutok.sk/fastgl/callback.html">functor</A> that stores the vertices in the current traversed path. A virtual operator allows application- and user-specific pruning methods defined in classes that inherit from Pruner. <A name="lgraph">lineGraph</A> <font face="Courier New"> LabeledGraph& lineGraph(void) const <A name="pgraph">productGraph</A> <font face="Courier New"> LabeledGraph& productGraph(bool (*) (const edge::type&, const edge::type&), const LabeledGraph&) const The first argument passed to productGraph defines a function that determines the adjacency between the set of node pairs in the product graph--returning true for adjacency and false for non-adjacency. There are 256 possible product graphs. LabeledGraph defines functions for very common types including: Cartesian, Categorical, Lexicographic, Modular, and Strong. e.g., <font face="Courier New">LabeledGraph&lt;VertexType, EdgeType&gt; product = graph1.productGraph(Cartesian, graph2); <A name="adj">adjacent</A> <font face="Courier New"> friend bool adjacent(const_iterator, const_iterator) <A name="getedge">getEdge</A> <font face="Courier New"> friend Vertex::Edge* getEdge(const_iterator, const_iterator) Edge is a nested public struct defined within the <A href="http://openwetware.org/wiki/User:CalebKennedy/Vertex">Vertex</A> class. It has two public members: 1. EdgeType* label (the edge label) and 2. Vertex* target (the vertex adjacent to this vertex). <A name="clique">clique</A> <font face="Courier New"> friend bool clique(const CliqueFinder&, unsigned long&) CliqueFinder is inherited from Finder, which is inherited from Pruner. Its overloaded operator finds the subgraph that corresponds to the maximal clique by using very simple heuristics to prune a depth-first traversal. The second parameter stores the number of real (non-<A href="http://en.wikipedia.org/wiki/Null_%28computer%29">NULL</A>) edges in the clique. <A name="sim">graphSimilarity</A> <font face="Courier New"> friend double graphSimilarity(const LabeledGraph&, const LabeledGraph&) Graph similarity can be defined in many ways and its particular definition is often application-specific. One convenient definition of graph similarity that is appropriate for a variety of applications involves finding the largest <A href="http://mathworld.wolfram.com/GraphIsomorphism.html">graph isomorphism</A> common to a pair of graphs. graphSimilarity implements a version of the <A href="http://comjnl.oxfordjournals.org/cgi/content/abstract/45/6/631">RASCAL</A> algorithm based on finding the maximum common edge subgraph. The returned measure of graph similarity is a value between zero and one (a value of one meaning the two graphs are isomorphic). </HTML>