检测循环对

时间:2013-11-18 18:05:26

标签: c++ detection std-pair cyclic stdset

假设std::set< std::pair<char, char> >,是否有人建议使用算法或方法来检查是否存在循环对?

e.g。

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

我不想使用任何extern库(允许使用c ++库),因为函数bool isCyclic(const std::set< std::pair<char, char> >& set);只会被使用一次而且它应该是#include一个大的库,比如boost {对于那个功能...

有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这里有一个图形,字符是它的顶点和集合中的对 - 边缘。您可以使用BFSDFS的任何搜索轻松检测是否存在循环。 另请查看this question。不要介意它处理无向的情况,因为算法是相同的。