Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct find_approximate_number_of_cliques_visitor
- {
- typedef typename boost::graph_traits<BaseGraph>::vertex_descriptor Vertex;
- typedef typename boost::graph_traits<BaseGraph>::vertex_iterator VertexIterator;
- typedef std::deque<Vertex> Clique;
- // What size cliques we are looking for.
- int desired_clique_size;
- // Total number of cliques of size desired_clique_size (INCLUDING OVERLAPPING CLIQUES)
- long long total_number_of_cliques;
- // Constructor
- find_approximate_number_of_cliques_visitor(int size) : desired_clique_size(size), total_number_of_cliques(0) {}
- // Called when a maximal clique is found
- template <typename Clique, typename BaseGraph>
- void clique(const Clique& maximal_clique, const BaseGraph& g)
- {
- std::cout << "in clique start (approx), size:" << maximal_clique.size() << ", total number:" << total_number_of_cliques << std::endl;
- // TODO: may need to sort edges?
- int maxclique_size = maximal_clique.size();
- std::cout << "in clique (approx), size:" << maximal_clique.size() << std::endl;
- long long number_of_cliques = 0;
- if(maxclique_size < desired_clique_size)
- number_of_cliques = 0;
- else
- number_of_cliques = 1;
- std::cout << "in clique preloop(approx), number_of_cliques:" << number_of_cliques << std::endl;
- // Repeat maxclique_size - desired_clique_size times.
- for(int i = maxclique_size; i > desired_clique_size; --i) {
- std::cout << "in clique loop(approx), number_of_cliques:" << number_of_cliques << ", i:" << i << std::endl;
- number_of_cliques *= i;
- }
- std::cout << "in clique postloop(approx), number_of_cliques:" << number_of_cliques << std::endl;
- total_number_of_cliques += number_of_cliques;
- std::cout << "in clique end(approx), total_number_of_cliques:" << total_number_of_cliques << std::endl;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement