正在检测循环对

Detecting cyclic pairs

本文关键字:循环 检测      更新时间:2023-10-16

假设一个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这样的大库,只用于这一个函数。。。

有什么办法解决这个问题吗?

这里有一个图,字符是它的顶点,对是集合中的边。您可以使用任何搜索(例如BFSDFS)轻松检测是否存在循环。也可以看看这个问题。不要介意它处理的是无向的情况,因为算法是一样的。