Hypergraphs modelling library with algorithms, the official page for more informations.
In a terminal:
git clone https://github.com/alex-87/HyperGraphLib.git
cd HyperGraphLib
cmake CMakeLists.txt
make
make install #Some privileges could be required
See the official page for more informations :)
The documentation, generated using Doxygen is available at the technical documentation page.
To compile HyperGraphLib, you need:
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <Hypergraph/model/Hypergraphe.hh>
#include <Hypergraph/model/HyperFactory.hh>
#include <Hypergraph/model/MotorAlgorithm.hh>
#include <Hypergraph/algorithm/Isomorph.hh>
#include <Hypergraph/algorithm/Simple.hh>
int main(int argc, char * argv[]) {
// Creating the hypergraph inside smart pointer
boost::shared_ptr<HypergrapheAbstrait> ptrHpg( new Hypergraphe() );
// Starting the create session
HyperFactory::startSession(ptrHpg);
// Creating the hyper-edges
boost::shared_ptr<HyperEdge> ptrEdge1 ( HyperFactory::newHyperEdge() );
boost::shared_ptr<HyperEdge> ptrEdge2 ( HyperFactory::newHyperEdge() );
// Creating the hyper-vertexes
boost::shared_ptr<HyperVertex> ptrVertexA( HyperFactory::newHyperVertex() );
boost::shared_ptr<HyperVertex> ptrVertexB( HyperFactory::newHyperVertex() );
// The hyper-vertex A is contained inside the hyper-edge 1
HyperFactory::link(ptrVertexA, ptrEdge1);
// The hyper-vertex B is contained inside the hyper-edge 2
HyperFactory::link(ptrVertexB, ptrEdge2);
// Adding the hyper-vertexes in the hypergraph
ptrHpg->addHyperVertex( ptrVertexA );
ptrHpg->addHyperVertex( ptrVertexB );
// Adding the hyper-edges in the hypergraph
ptrHpg->addHyperEdge(ptrEdge1);
ptrHpg->addHyperEdge(ptrEdge2);
// Creating the adjacent matrix inside the hypergraph
ptrHpg->flush();
// Closing the session
HyperFactory::closeSession();
// -- -- --
// Initializing the Isomorphism algorithm with ptrHpg (twice, just for the example)
boost::shared_ptr<AlgorithmeAbstrait> isomorphPtr( new Isomorph( ptrHpg , ptrHpg ) );
// Setting the motor's algorithm
MotorAlgorithm::setAlgorithme( isomorphPtr );
// Running the motor
MotorAlgorithm::runAlgorithme();
// Getting the result
RStructure r1( isomorphPtr->getResult() );
if( r1.getBooleanResult() ) {
std::cout << "The hypergraph is isomorph with itself" << std::endl;
}
// -- -- --
// Initializing the Simple algorithm with ptrHpg (twice, just for the example)
boost::shared_ptr<AlgorithmeAbstrait> simplephPtr( new Simple( ptrHpg ) );
// Setting the motor's algorithm
MotorAlgorithm::setAlgorithme( simplephPtr );
// Running the motor
MotorAlgorithm::runAlgorithme();
// Getting the result
RStructure r2( simplephPtr->getResult() );
if( r2.getBooleanResult() ) {
std::cout << "The hypergraph is simple." << std::endl;
}
return 0;
}
g++ example.cpp -o example -lhypergraph
The output is:
$ ./example
The hypergraph is isomorph with itself
The hypergraph is simple.
This software uses the Boost Library. Please see the Boost license at http://www.boost.org/LICENSE_1_0.txt
This software uses the Gecode Library. Please see the Boost license at https://www.gecode.org/license.html
This software is licensed under the MIT License.