Предположим, что std::set< std::pair<char, char> >
, может кто-нибудь предложить алгоритм или подход, чтобы проверить, существуют ли циклические пары?Обнаружение циклических пар
например.
std::set< std::pair<char, char> > cyclic = { {'A', 'B'}, {'B', 'C'}, {'C', 'A'} };
std::set< std::pair<char, char> > not_cyclic = { {'A', 'B'}, {'B', 'C'}, {'C', 'C'} };
isCyclic(cyclic); // true
isCyclic(not_cyclic); // false
Я не хочу использовать любую Экстерну библиотеку (C++ библиотеки разрешена), так как функция bool isCyclic(const std::set< std::pair<char, char> >& set);
будет использоваться только один раз, и она должна быть избыточна для #include
большой библиотекой, как импульс только для этой одной функции ...
Любые идеи, как решить эту проблему?
У вас есть список смежности. Используйте его, чтобы построить дерево, используя DFS, и найдите задний край. http://en.wikipedia.org/wiki/Depth-first_search – IdeaHat
Как насчет '{{A, B}, {B, A}}'? Или '{{A, B}, {B, C}, {A, C}}'? – Beta
@Beta Первый по-прежнему является циклическим, который я ищу, а второй - нет. – user2804578