Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从树检测循环';无向图的s根_C++_Algorithm_Tree_Graph Theory_Undirected Graph - Fatal编程技术网

C++ 从树检测循环';无向图的s根

C++ 从树检测循环';无向图的s根,c++,algorithm,tree,graph-theory,undirected-graph,C++,Algorithm,Tree,Graph Theory,Undirected Graph,我想确定给定的图是否具有我想要的结构。我想要的结构是,如果给定的图的树的根形成一个循环,那么输出为true,否则为false 下面是一个示例图: 它有3棵树,根1,5,4形成一个循环 此外,这是一个不应通过的示例,因为它不包含构成循环的树的根: 如何在给定顶点的情况下确定应搜索哪些树 这是迄今为止的代码,用于打印给定图形的邻接列表 #include <iostream> #include <vector> using namespace std; void ad

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

下面是一个示例图: 它有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; 
} 
#包括
#包括
使用名称空间std;
无效加法(向量向量向量[],整数u,整数v)
{ 
vec[u]。推回(v);
} 
void printGraph(向量向量[],int j)
{

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

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

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

    从那里,你知道你有正确数量的节点和边。你只需要检查图是否连接,你可以通过图上的DFS或BFS来完成

    这一点的好处在于,如果正确实现,运行时将为O(n),其中n是节点数,与边数无关。毕竟,如果看到的边数超过n,则可以停止搜索


    希望这有帮助!

    您的问题是如何判断给定的图形

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

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

    从那里,你知道你有正确数量的节点和边。你只需要检查图是否连接,你可以通过图上的DFS或BFS来完成

    这一点的好处在于,如果正确实现,运行时将为O(n),其中n是节点数,与边数无关。毕竟,如果看到的边数超过n,则可以停止搜索


    希望这有帮助!

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