【发布时间】:2013-11-18 18:05:26
【问题描述】:
假设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 一个像 boost 这样的大库来说,它应该是矫枉过正的...
任何想法如何解决这个问题?
【问题讨论】:
-
你拥有的是一个邻接列表。使用它使用 DFS 构建树,并寻找后边缘。 en.wikipedia.org/wiki/Depth-first_search
-
{{A,B},{B,A}}怎么样?还是{{A,B},{B,C},{A,C}}? -
@Beta 第一个仍然是我正在寻找的循环,第二个不是。
标签: c++ detection std-pair cyclic stdset