首页 > 其他 > 详细

生成一棵树

时间:2015-05-16 16:23:28      阅读:188      评论:0      收藏:0      [点我收藏+]

出数据时总会用到。。。自己yy了一个写法不知道肿么样。。。QAQ,而且节点无法确定只是近似值QAQ

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<ctime>
 6 using namespace std;
 7 const int maxn=100000+10;
 8 struct Tedge{int x,y,next;}adj[maxn*2];int ms=0,fch[maxn];
 9 void AddEdge(int u,int v){adj[++ms]=(Tedge){u,v,fch[u]};fch[u]=ms;return;}
10 int f[maxn][2];
11 inline int read(){
12     int x=0,sig=1;char ch=getchar();
13     while(!isdigit(ch)){if(ch==-) sig=-1;ch=getchar();}
14     while(isdigit(ch)) x=10*x+ch-0,ch=getchar();
15     return x*sig;
16 }
17 inline void write(int x){
18     if(x==0){putchar(0);return;}if(x<0) putchar(-),x=-x;
19     int len=0,buf[15];while(x) buf[len++]=x%10,x/=10;
20     for(int i=len-1;i>=0;i--) putchar(buf[i]+0);return;
21 }
22 int n,tot=1;
23 void make_tree(int u,int num){
24     if(num==1) {;return;}
25     if(num==0) {tot--;return;}
26     int tp=rand()%3+1;
27     if(tp>=num) tp=2;
28     int all=num,odd=num/tp,i;
29     for(i=1;i<tp;i++){
30         AddEdge(u,++tot);
31         printf("%d->%d\n",u,tot);
32         all-=odd;
33         make_tree(tot,odd);
34     }
35     if(i<=tp){
36         AddEdge(u,++tot);
37         printf("%d->%d\n",u,tot);
38         make_tree(tot,all);
39     }
40     return;
41 }
42 void make(int n){
43     srand(time(0));
44     make_tree(1,n/2);
45 }
46 void init(){
47     make(6);
48     return;
49 }
50 void work(){
51     return;
52 }
53 void print(){
54     return;
55 }
56 int main(){
57     init();work();print();return 0;
58 }

 

生成一棵树

原文:http://www.cnblogs.com/chxer/p/4507908.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!