【发布时间】: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