eg1-iso.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 107 行

CPP
107
字号
// Boost.Graph library isomorphism test// Copyright (C) 2001 Douglas Gregor (gregod@cs.rpi.edu)//// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)// For more information, see http://www.boost.org//// Revision History://// 29 Nov 2001    Jeremy Siek//      Changed to use Boost.Random.// 29 Nov 2001    Doug Gregor//      Initial checkin.#define BOOST_INCLUDE_MAIN#include <boost/test/test_tools.hpp>#include <boost/graph/adjacency_list.hpp>#include <boost/graph/isomorphism.hpp>//#include "isomorphism-v3.hpp"#include <boost/property_map.hpp>#include <iostream>#include <fstream>#include <map>#include <algorithm>#include <cstdlib>#include <ctime>using namespace boost;enum { a, b, c, d, e, f, g, h };enum { _1, _2, _3, _4, _5, _6, _7, _8 };void test_isomorphism() {  typedef adjacency_list<vecS, vecS, bidirectionalS> GraphA;  typedef adjacency_list<vecS, vecS, bidirectionalS> GraphB;  char a_names[] = "abcdefgh";  char b_names[] = "12345678";  GraphA Ga(8);  add_edge(a, d, Ga);  add_edge(a, h, Ga);  add_edge(b, c, Ga);  add_edge(b, e, Ga);  add_edge(c, f, Ga);  add_edge(d, a, Ga);  add_edge(d, h, Ga);  add_edge(e, b, Ga);  add_edge(f, b, Ga);  add_edge(f, e, Ga);  add_edge(g, d, Ga);  add_edge(g, f, Ga);  add_edge(h, c, Ga);  add_edge(h, g, Ga);  GraphB Gb(8);  add_edge(_1, _6, Gb);  add_edge(_2, _1, Gb);  add_edge(_2, _5, Gb);  add_edge(_3, _2, Gb);  add_edge(_3, _4, Gb);  add_edge(_4, _2, Gb);  add_edge(_4, _3, Gb);  add_edge(_5, _4, Gb);  add_edge(_5, _6, Gb);  add_edge(_6, _7, Gb);  add_edge(_6, _8, Gb);  add_edge(_7, _8, Gb);  add_edge(_8, _1, Gb);  add_edge(_8, _7, Gb);    std::vector<std::size_t> in_degree_A(num_vertices(Ga));  boost::detail::compute_in_degree(Ga, &in_degree_A[0]);  std::vector<std::size_t> in_degree_B(num_vertices(Gb));  boost::detail::compute_in_degree(Gb, &in_degree_B[0]);  degree_vertex_invariant<std::size_t*, GraphA>     invariantA(&in_degree_A[0], Ga);  degree_vertex_invariant<std::size_t*, GraphB>     invariantB(&in_degree_B[0], Gb);  std::vector<graph_traits<GraphB>::vertex_descriptor> f(num_vertices(Ga));  bool ret = isomorphism(Ga, Gb, &f[0], invariantA, invariantB,                          (invariantB.max)(),                         get(vertex_index, Ga), get(vertex_index, Gb));  assert(ret == true);  for (std::size_t i = 0; i < num_vertices(Ga); ++i)    std::cout << "f(" << a_names[i] << ")=" << b_names[f[i]] << std::endl;    BOOST_TEST(verify_isomorphism(Ga, Gb, &f[0]));}int test_main(int, char* []){  test_isomorphism();  return boost::report_errors();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?