 <p>The <a href="http://www.boost.org/doc/libs/1_55_0/boost/graph/" rel="nofollow">Boost Graph Library</a> actually seems to have an implementation of a clique search algorithm, although I have not been able to find the documentation for it. However, you can take a look at <a href="http://www.boost.org/doc/libs/1_55_0/boost/graph/bron_kerbosch_all_cliques.hpp" rel="nofollow">the implementation source code of the algorithm</a> and at <a href="http://www.boost.org/doc/libs/1_55_0/libs/graph/example/bron_kerbosch_print_cliques.cpp" rel="nofollow">this example</a> to get an idea of how it's used. For your purpose, you could do something like this (this code compiles and works with Boost 1.55.0 and g++ 4.8.2 using flag <code>-std=c++11</code>):</p> <pre class="lang-cpp prettyprint-override"><code>#include &lt;boost/graph/undirected_graph.hpp&gt; #include &lt;boost/graph/bron_kerbosch_all_cliques.hpp&gt; #include &lt;set&gt; #include &lt;iostream&gt; // this is the visitor that will process each clique found by the algorithm template &lt;typename VertexWeight&gt; struct max_weighted_clique { typedef typename boost::property_traits&lt;VertexWeight&gt;::key_type Vertex; typedef typename boost::property_traits&lt;VertexWeight&gt;::value_type Weight; max_weighted_clique(const VertexWeight&amp; weight_map, std::set&lt;Vertex&gt;&amp; max_clique, Weight&amp; max_weight) : weight_map(weight_map), max_weight(max_weight), max_clique(max_clique) { // max_weight = -inf max_weight = std::numeric_limits&lt;Weight&gt;::lowest(); } // this is called each time a clique is found template &lt;typename Clique, typename Graph&gt; void clique(const Clique&amp; c, const Graph&amp; g) { // check the current clique value std::set&lt;Vertex&gt; current_clique; Weight current_weight = Weight(0); for(auto it = c.begin(); it != c.end(); ++it) { current_clique.insert(*it); current_weight += weight_map[*it]; } // if it is a bigger clique, replace if (current_weight &gt; max_weight) { max_weight = current_weight; max_clique = current_clique; } } const VertexWeight&amp; weight_map; std::set&lt;Vertex&gt; &amp;max_clique; Weight&amp; max_weight; }; // may replace with long, double... typedef int Weight; // this struct defines the properties of each vertex struct VertexProperty { Weight weight; std::string name; }; int main(int argc, char *argv[]) { // graph type typedef boost::undirected_graph&lt;VertexProperty&gt; Graph; // vertex descriptor type typedef boost::graph_traits&lt;Graph&gt;::vertex_descriptor Vertex; // create the graph Graph g; // add vertices Vertex v1 = boost::add_vertex(g); g[v1].weight = 5; g[v1].name = "v1"; Vertex v2 = boost::add_vertex(g); g[v2].weight = 2; g[v2].name = "v2"; Vertex v3 = boost::add_vertex(g); g[v3].weight = 6; g[v3].name = "v3"; // add edges boost::add_edge(v1, v2, g); boost::add_edge(v1, v3, g); boost::add_edge(v2, v3, g); // instantiate the visitor auto vertex_weight = boost::get(&amp;VertexProperty::weight, g); std::set&lt;Vertex&gt; max_clique; Weight max_weight; max_weighted_clique&lt;decltype(vertex_weight)&gt; visitor(vertex_weight, max_clique, max_weight); // use the Bron-Kerbosch algorithm to find all cliques boost::bron_kerbosch_all_cliques(g, visitor); // now max_clique holds a set with the max clique vertices and max_weight holds its weight auto vertex_name = boost::get(&amp;VertexProperty::name, g); std::cout &lt;&lt; "Max. clique vertices:" &lt;&lt; std::endl; for (auto it = max_clique.begin(); it != max_clique.end(); ++it) { std::cout &lt;&lt; "\t" &lt;&lt; vertex_name[*it] &lt;&lt; std::endl; } std::cout &lt;&lt; "Max. clique weight = " &lt;&lt; max_weight &lt;&lt; std::endl; return 0; } </code></pre> <p>I don't know if this code would perform better or worse than Cliquer (I've not done much clique searching in big graphs), but you might as well give it a try (and share your conclusions :) )</p> <p>There is also a <a href="http://www.boost.org/doc/libs/1_55_0/libs/graph_parallel/doc/html/index.html" rel="nofollow">Parallel Boost Graph Library</a>, but unfortunately it does not seem to implement a clique search algorithm (not even a "hidden" one).</p> <p>Also, I've just bumped into a parallel implementation of an algorithm to find maximum cliques called <a href="http://commsys.ijs.si/~matjaz/maxclique/" rel="nofollow">MaxCliquePara</a>. I've not used it, so I cannot talk about ease of use or performance, but it looks good. However, note that this implementation search for cliques with maximum amount of vertices, which is not exactly what you're looking for - although maybe you can tweak the code to your needs.</p> <p>EDIT:</p> <p>It seems that there exists some documentation about the BGL <code>bron_kerbosch_all_cliques()</code> in the <a href="https://github.com/boostorg/graph/blob/develop/quickbook/reference/bron_kerbosch_all_cliques.qbk" rel="nofollow">quickbook sources of the library</a>. Although it's a documentation generator, it's fairly readable. So there's that.</p>