本文主要是介绍无根树转有根树代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;const int maxn= 10005;
int n,p[maxn];
vector<int> G[maxn];void dfs(int u,int fa) //递归转化为以u为根的子树,u的父亲为fa
{int d = G[u].size();for(int i=0;i<d;i++) //循环遍历跟这个结点相连接的d个结点{int v = G[u][i];if(fa != v)dfs(v,p[v] = u);//把v的父结点设置为u,然后递归转化为v为根的子树//一定要判断v是否和其父结点相等! }
}int main()
{//freopen("1.txt","r",stdin); scanf("%d",&n);for(int i=0;i<n-1;i++) //输入n-1条边 {int u,v;scanf("%d%d",&u,&v);G[u].push_back(v);G[v].push_back(u);}int root;scanf("%d",&root); //指定根结点p[root] = -1;dfs(root,-1);cout<<"-------------"<<endl;for(int i=1;i<=n;i++){printf("%d的父结点为:%d\n",i,p[i]); } return 0;
}
这篇关于无根树转有根树代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!