Комбинируя вышеупомянутые ответы, следующий ответ печатает список индекса всех вершин, лежащий на самой длинной границе (и также сохраняет вектор индекса). Для простоты включения игнорируются:
typedef CGAL::Simple_cartesian<double> Kernel;
typedef CGAL::Surface_mesh<Kernel::Kernel::Point_3> SurfaceMesh;
typedef boost::graph_traits<SurfaceMesh>::halfedge_descriptor halfedge_descriptor;
typedef SurfaceMesh::Vertex_index mesh_vertex_descriptor;
boost::filesystem::path in;
SurfaceMesh sm;
std::vector<int> borderVertexID;
in >> sm;
bhd = CGAL::Polygon_mesh_processing::longest_border(sm).first;
BOOST_FOREACH(mesh_vertex_descriptor ved, vertices_around_face(bhd,sm)){
std::cout << ved << std::endl;
borderVertexID.push_back(ved);
}