【问题标题】:Detecting a cycle from tree's roots in an undirected graph从无向图中的树根检测循环
【发布时间】:2020-08-02 05:20:27
【问题描述】:

我想确定给定的图形是否具有我想要的结构。我想要的结构是,如果给定图的树的根形成一个循环,则输出为真,否则为假。

这是一个示例图表: 它有3棵树,根1,5,4形成一个循环。

这也是一个不应该通过的例子,因为它不包含树的哪个根形成一个循环:

在给定顶点的情况下,我如何决定应该搜索哪些树?

这是目前的代码,打印给定图的邻接列表。

#include <iostream>
#include <vector>
using namespace std; 
  
void addEdge(vector<int> vec[], int u, int v) 
{ 
    vec[u].push_back(v); 
} 

void printGraph(vector<int> vec[], int j) 
{
    cout << "Graph's adjacent list: \n";
    for (int v = 0; v < j; ++v) 
    { 
        if (vec[v].size() == 0) continue;
        cout << "Head(" << v << ")"; 
        for (auto x = vec[v].begin(); x != vec[v].end(); x++)
           cout << " -> " << *x; 
        cout << "\n" ; 
    } 
} 

int main() 
{ 
    int V = 10; 
    vector<int> vec[V];
    addEdge(vec, 6, 3); 
    addEdge(vec, 7, 1); 
    addEdge(vec, 8, 9); 
    addEdge(vec, 6, 4); 
    addEdge(vec, 5, 1); 
    addEdge(vec, 1, 9); 
    addEdge(vec, 2, 5); 
    addEdge(vec, 1, 4); 
    addEdge(vec, 5, 4); 
    printGraph(vec, V); 
    return 0; 
} 

【问题讨论】:

  • 到目前为止你尝试过什么?你是如何在代码中表示图形的?
  • 我编写了在给定节点和边的情况下实现图形的部分。然后打印图的邻接列表。还对在图中找到循环的部分进行了编码,但这根本没有帮助,因为并非所有图都具有我上面指定的结构。
  • 好的,但至少显示您已经拥有的代码,然后用它描述问题。
  • 确认一下:您要检查三角形中是否有三个节点相连,使得除这三个节点之外的图形形成一棵树?
  • @george_pap 在给定顶点的情况下,我该如何决定我应该搜索哪些树? -- 这有关系吗?无论您从哪个节点开始,如果您进行深度优先搜索,您都会进入循环。

标签: c++ algorithm tree graph-theory undirected-graph


【解决方案1】:

你的问题是如何判断给定的图表是否

  1. 正好包含一个循环,
  2. 循环中的每个节点都是树的根。

好消息是,假设您的图是连通的,那么如果属性 (1) 为真,那么属性 (2) 也是如此!要了解这是为什么,请想象从该循环中删除任何边缘。现在你有一个没有环的连通图,它是一棵树。这意味着 每个 节点,而不仅仅是循环中的节点,都可以被视为根。

这方面的好处是有一个非常好的算法来确定一个图是否连通并且是否包含一个循环。首先,计算图中的边数。如果图确实是连通的并且正好包含一个环,那么边的数量应该正好等于节点的数量。 (一棵树的节点比边多一个,并且您已经添加了一条边)。如果不是这样,那就停下来——答案是否定的。

从那里,您知道您拥有正确数量的节点和边。您只需要检查图是否已连接,您可以在图上使用 DFS 或 BFS。

这方面的好处是,如果你正确实现它,运行时间将为 O(n),其中 n 是节点数,与边数无关。毕竟,如果看到多于 n 条边,就可以停止搜索。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多