【问题标题】:Number of Nodes in a Cycle of a graph图的一个循环中的节点数
【发布时间】:2016-08-07 07:11:21
【问题描述】:

我正在尝试查找图形循环中的节点数。我正在使用递归和 DFS 来计算图的所有循环中的节点数。这是 C++ 中的计算函数。

int iscyclic(int node,bool visited[],bool rec[],vector<int>g[])
{
    if(!visited[node])
{
    visited[node] = true;
    rec[node] = true;
    vector<int>::iterator it;
    for(it=g[node].begin();it!=g[node].end();it++)
    {
        if(!visited[*it] && iscyclic(*it,visited,rec,g))
        {
            kount++;
        }
        else if(rec[*it])
            kount++;
    }
}
rec[node] = false;
return kount;
}

Visitedrec 数组默认设置为 false,kount 已全局设置为 0kount应该是计算有向图的一个循环中的节点数。但是也有答案错误的情况。请帮忙。我最近开始学习图论。

【问题讨论】:

  • “但也有答案错误的情况。” - 例子?
  • 节点数 = 4 边数 = 4 连接如下:- 1 -2, 2 -3, 3 -4, 4 -3,
  • 循环数是图形大小的指数,你确定要全部计算吗?
  • 是的,考虑了循环数,但让我烦恼的是一个循环中的节点数

标签: c++ graph digraphs


【解决方案1】:

你不应该这样做:

else if(rec[*it])
   kount++;

此外,您需要确保起始节点(您调用函数的那个​​节点)确实是循环的一部分。

第三件事-你返回kcount作为你的函数的结果,当你实际上应该返回truefalse时,基于你是否在这个分支中遇到了一个循环。

【讨论】:

  • 好的,但是在返回布尔值时,我会得到天气是否存在循环的结果,但我有兴趣查找该循环中存在的节点数
  • 不。无论哪种方式,您都可以在kcount 中获得结果。它是全球性的,您可以随时访问它。另一方面,是否找到循环是重要的结果,它告诉您当前处理的递归分支是否触发了成功的结果。如果成功,您应该停止考虑其他分支
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 2017-11-10
  • 1970-01-01
  • 2016-08-10
  • 2021-11-08
  • 2014-05-23
  • 1970-01-01
相关资源
最近更新 更多