所以,我使用无序多图实现了有向图。地图中的每对由两个字符串组成:顶点及其相邻顶点。 现在,我试图确定我的图表是否有周期,如果是,周期有多大。这是我到目前为止的代码:
int findCycle(const unordered_multimap<string,string> & connectedURLVertices, string y, string key)
{
string position;
position=y.find(key);
if(position!=string::npos)
{
return 1;
}
auto nodesToCheck=connectedURLVertices.equal_range(key);
for(auto & node : nodesToCheck)
{
int z=findCycle(connectedURLVertices,y+key,node);
}
}
我已经完成了纸上的代码,它似乎在逻辑上是正确的,但如果有人可以看一看,看看我是在正确的轨道上还是遗漏任何东西,我将不胜感激。谢谢!
答案 0 :(得分:0)
要搜索图形中的循环,您必须递归地从某个初始节点通过弧线下降,直到到达一个已访问过的节点(您可以构建std::set
已访问过的节点或在访问时标记节点它们或排出所有节点而没有得到一个已经访问过的节点(没有循环)可以调整选择弧的标准以更快地找到它或搜索的类型(首先是深度,按级别搜索等)