离散数学中,无根树指无环连通无向图。
一棵无根树是一个二元组(v,e),其中:1.V是非空集合,称为顶点集。2.E是V中元素构成的无序二元组的集合,称为边集。
直观来说,若一个图中每条边都是无方向的,则称为无向图。无向图中的边均是顶点的无序对,无序对通常用圆括号表示。无根树它要求每个顶点之间都直接或间接相连,且图中没有环,即只有简单路径。
由于树是图的子集,这一类图具有树的特征,但不具有树状的形式,没有特定的根节点,故称为无根树。
任意选取图中某个点为根,均可将无根树转化成为有根树。
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
vector<int> v[100];
int p[100];
void dfs(int p1, int p2)
{
for(int i = 0; i < v[p1].size(); i++)
{
int h = v[p1][i];
if(h != p2)dfs(h, p[h] = p1);
}
}
int main()
{
int root, n;
cin >> root >> n;
for(int i = 1; i < n; i++)//n个定点有n-1条边
{
int a, b;
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
p[root] = -1;
dfs(root, -1);
}