zoukankan      html  css  js  c++  java
  • 树型数据生成器

    随机一个树的核心,作为根节点,然后只向着核心的方向建边。

    #include<bits/stdc++.h>
    #include<time.h>
    using namespace std;
    
    int a[500001];
    pair<int,int> pr[500001];
    int cnt = 0;
    
    int rrand(int l, int r) {//生成一个在 [l, r] 内的随机数
    	int t = (rand() % (1 << 10)) * (rand() % (1 << 10));
    	return t % (r - l + 1) + l; 
    }
    
    int main()
    {
    	srand(time(0) * 1000 + time(0));
    	int n;
    	scanf("%d", &n);//如果需要直接随机的话把这里改成 n = rand() 或 n = rrand(区间左端点,区间右端点) 就好
    	printf("%d
    ", n);
    	int d = rrand(1, n);
    	for(int i = 1; i <= n; ++i) {
    		a[i] = i;
    	}
    	random_shuffle(a + 1, a + n + 1);//STL库函数,可以随机打乱数组中的元素
    	for(int i = d - 1; i >= 1; --i) {
    		int to = rrand(i + 1,d);
    		cnt++;
    		if(rand() & 1) pr[cnt] = make_pair(a[i],a[to]);
    		else pr[cnt] = make_pair(a[to],a[i]);
    	}
    	for(int i = d + 1; i <= n; ++i) {
    		int to = rrand(d,i - 1);
    		cnt++;
    		if(rand() & 1) pr[cnt] = make_pair(a[i],a[to]);
    		else pr[cnt] = make_pair(a[to],a[i]);
    	}
    	random_shuffle(pr + 1,pr + n);
    	for(int i = 1; i <= n - 1; ++i) {
    		printf("%d %d
    ", pr[i].first, pr[i].second);
    	}
    	return 0;
    }
    
  • 相关阅读:
    redis
    魔法方法
    vue
    bbs技术总结
    Linux
    爬虫
    路飞项目
    Django-rest framework框架
    Django框架
    WEB
  • 原文地址:https://www.cnblogs.com/zimujun/p/13761406.html
Copyright © 2011-2022 走看看