To demonstrate my point, you will find hereafter an C++ example extracted from the Boost.Graph's documentation. If the macro "ADJACENCY_LIST_STRUCT" is commented out, this code can't be compiled w/ VS2012 aka VC11 because the static assertion @line 837 of "boost/graph/vf2_sub_graph_iso.hpp" is triggered.
My questions are:
- Does this VF2 implementation supports "adjacency_matrix" model?
- Is there any patch for supporting this model of graph?
FYI: If I comment two static assertations in file "boost/graph/vf2_sub_graph_iso.hpp", at line 837 and line 843, the code compiles and runs correctly for "adjacency_matrix" model.
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/adjacency_matrix.hpp>
#include <boost/graph/vf2_sub_graph_iso.hpp>
using namespace boost;
//#define ADJACENCY_LIST_STRUCT
int main()
{
#ifdef ADJACENCY_LIST_STRUCT
typedef adjacency_list<vecS, vecS, undirectedS> graph_type;
#else
typedef adjacency_matrix<undirectedS> graph_type;
#endif
// Build graph1.
const int num_vertices1 = 8;
graph_type graph1(num_vertices1);
add_edge(0, 6, graph1); add_edge(0, 7, graph1);
add_edge(1, 5, graph1); add_edge(1, 7, graph1);
add_edge(2, 4, graph1); add_edge(2, 5, graph1); add_edge(2, 6, graph1);
add_edge(3, 4, graph1);
// Build graph2.
const int num_vertices2 = 9;
graph_type graph2(num_vertices2);
add_edge(0, 6, graph2); add_edge(0, 8, graph2);
add_edge(1, 5, graph2); add_edge(1, 7, graph2);
add_edge(2, 4, graph2); add_edge(2, 7, graph2); add_edge(2, 8, graph2);
add_edge(3, 4, graph2); add_edge(3, 5, graph2); add_edge(3, 6, graph2);
// Compute de subgraph isomorphing.
vf2_print_callback<graph_type, graph_type> cb(graph1, graph2);
vf2_subgraph_iso(graph1, graph2, cb);
}