无根树转化为有根树

离散数学中,无根树指无环连通无向图。
一棵无根树是一个二元组(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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值