码迷,mamicode.com
首页 > 其他好文 > 详细

生成一棵树

时间:2015-05-16 16:26:08      阅读:105      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!