Я использую библиотеку графов C ++ KOALA для вычисления минимального сечения графа.
Это пример, который я использую - пример . Он просто создает график с мощностями по краям и вычисляет минимальный срез.
Мой вопрос связан с этой строкой:
Flow::minEdgeCut(g, cap, s, t, Flow::outCut(blackHole, edgeIter()));
Вот документ для аргументов функции .
Он говорит, что возвращает ребра, через которые проходит минимальный разрез. Он печатает края немедленно с помощью std::cout
, но мне нужно получить к ним доступ позже в программе. Мой вопрос заключается в том, как получить доступ к структуре данных, в которой они хранятся, например, чтобы распечатать их на более позднем этапе.
Пример передает stuct edgeIter
в качестве аргумента outCut
. edgeIter
предоставляет 3 оператора перегрузки. Нужно ли добавить еще одного члена к этой статье?
struct edgeIter {
void operator=(MyGraph::PEdge e) { cout << e->info; }
void operator++() { }
edgeIter &operator*() { return *this; }
};
Вот также определение метода outcut
.
/** \brief Auxiliary class to represent the edge cut. (output structure) */
template< class VIter, class EIter > struct OutCut
{
VIter vertIter;/**<\brief Insert iterator to the container with vertexes (accessible from starting vertex after the cut)*/
EIter edgeIter;/**<\brief Insert iterator to the container with edges of the cat.*/
/**\brief Constructor*/
OutCut( VIter av, EIter ei ): vertIter( av ), edgeIter( ei ) { }
};
/**\brief Generating function for the OutCut object.
*
* \tparam VIter the type of insert iterator to container with vertices.
* \tparam EIter the type of insert iterator to container with edges.
* \param av the insert iterator to container with vertices.
* \tparam ei the insert iterator to container with edges.
*
* [See example](examples/flow/example_Flow.html). */
template< class VIter, class EIter > static OutCut< VIter,EIter > outCut( VIter av, EIter ei )
{ return OutCut< VIter,EIter >( av,ei ); }