提示

1、请使用c++11编译运行

2、默认生成100个输出文件,文件名为data1.in到data100.in,如有需要自行修改

3、50000以下的点1s内可以运行结束,50000-300000的点在30s内运行结束,300000以上看人品

4、生成的图为无向连通图,因此如果边数小于点数-1,程序自动终止

5、如果边数点数大于10000000或者为负数,程序自动终止

6、如果运算量过大,程序自行终止

7、默认带有边权以及参数k

8、4到7条可以自行修改

9、输出到屏幕中的文字不会输出到文件中

代码

#include<bits/stdc++.h>
#include<cstdio>
#include<fstream>
using std::cout; using std::endl;
using std::default_random_engine;
using std::uniform_int_distribution;
using namespace std;
const int maxn=10000015;
int n,m,cnt,fa[maxn];
char s[1000][1000];
int zhao(int xx){
if(fa[xx]==xx) return xx;
else return fa[xx]=zhao(fa[xx]);
}
int main(){
fprintf(stderr,"This program is used to generate undirected connected graphs with n nodes, m edges and K weights.\n");
fprintf(stderr,"The program generates 100 input files by default.\n");
fprintf(stderr,"For each input file, you must enter three parameters, N, m, and K.\n");
fprintf(stderr,"Please make sure that 0<=n<=10000000 0<=m<=10000000 m>=n-1.\n");
fprintf(stderr,"N is the number of nodes in the graph, M is the number of edges in the graph\n");
fprintf(stderr,"and K is some parameters in the graph. If you do not want to output K.\n");
fprintf(stderr,"Please delete the code yourself.\n");
fprintf(stderr,"MADE BY HZOI_LIUCHANG.\n");
default_random_engine engine(time(NULL));
srand(time(NULL));
for(int i=1;i<=100;i++){
int cntt[9];
memset(cntt,0,sizeof(cntt));
int Num=-1;
int now=i;
while(now){
cntt[++Num]=now%10;
now/=10;
}
s[i][0]='d';
s[i][1]='a';
s[i][2]='t';
s[i][3]='a';
for(int j=4;j<=Num+4;j++){
s[i][j]=cntt[Num+4-j]+'0';
}
s[i][Num+5]='.';
s[i][Num+6]='i';
s[i][Num+7]='n';
}
for(int kk=1;kk<=100;kk++){
long long now=0;
if(kk>=2) fprintf(stderr,"Last num:%d is OK\n.",kk-1);
fprintf(stderr,"Now the %dth set of data is generated.\n",kk);
fprintf(stderr,"please enter n m k\n");
fprintf(stderr,"And then waiting....\n");
freopen(s[kk],"w",stdout);
cnt=0;
int jl=0;
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
uniform_int_distribution<> dis(1,0x3f3f3f3f);
printf("%d %d %d\n",n,m,k);
if(m<n-1){
fprintf(stderr,"Wrong!m must be bigger than n-1.\n");
fprintf(stderr,"The %dth data is not generated.\n",kk);
continue;
}
if(m<0 || m>10000000){
fprintf(stderr,"Wrong!m is too big or too small.\n");
fprintf(stderr,"The %dth data is not generated.\n",kk);
continue;
}
if(n<0 || n>10000000){
fprintf(stderr,"Wrong!n is too big or too small.\n");
fprintf(stderr,"The %dth data is not generated.\n",kk);
continue;
}
for(int i=1;i<=n;i++){
fa[i]=i;
}
while(cnt<n-1){
now++;
if(now>=10000000000){
fprintf(stderr,"Too large to build\n");
jl=1;
break;
}
int x=dis(engine)%n+1,y=dis(engine)%n+1;
int x1=zhao(x),y1=zhao(y);
int z=rand()*rand()%10000000+1;
if(x1!=y1){
fa[x1]=y1,cnt++;
printf("%d %d %d\n",x,y,z);
}
}
if(jl){
fprintf(stderr,"The %dth data is not generated.\n",kk);
continue;
}
m=m-(n-1);
for(int i=1;i<=m;i++){
int x=dis(engine)%n+1,y=dis(engine)%n+1;
int z=rand()*rand()%10000000+1;
printf("%d %d %d\n",x,y,z);
}
}
return 0;
}

c++ 随机生成带权联通无向图的更多相关文章

  1. 用NetworkX生成并绘制(带权)无向图

    NetworkX是一个非常强大的网络科学工具,它封装了图的数据结构和许多经典图算法,也内置了许多可视化函数可供调用. 1. 随机图生成 最经典的随机图当属我们在上一篇博客<Erdos-Renyi ...

  2. 随机带权选取文件中一行 分类: linux c/c++ 2014-06-02 00:11 344人阅读 评论(0) 收藏

    本程序实现从文件中随即选取一行,每行被选中的概率与改行长度成正比. 程序用一次遍历,实现带权随机选取. 算法:假设第i行权重wi(i=1...n).读取到文件第i行时,以概率wi/(w1+w2+... ...

  3. selenium + python自动化测试unittest框架学习(七)随机生成姓名

    在自动化测试过程中经常要测试到添加用户的操作,每次都要输入中文,原本是找了十几个中文写成了列表,然后从列表中随机取出填入用户名文本框中,随着测试的增加,发现同名的人搜索出来一大堆,最后在网上找了个随机 ...

  4. 浅谈并查集&种类并查集&带权并查集

    并查集&种类并查集&带权并查集 前言: 因为是学习记录,所以知识讲解+例题推荐+练习题解都是放在一起的qvq 目录 并查集基础知识 并查集基础题目 种类并查集知识 种类并查集题目 并查 ...

  5. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  6. Codeforces Educational Codeforces Round 5 C. The Labyrinth 带权并查集

    C. The Labyrinth 题目连接: http://www.codeforces.com/contest/616/problem/C Description You are given a r ...

  7. Java 随机生成中文姓名,手机号,邮编,住址

    package lovo; import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @auth ...

  8. Linux下随机生成密码的命令总结

    有时候经常为如何设置一个安全.符合密码复杂度的密码而绞尽脑汁,说实话,这实在是一个体力活而且浪费时间,更重要的是设置密码的时候经常纠结.终于有一天实在忍不住了,于是学习.整理了一下如何使用Linux下 ...

  9. shell随机生成身份证,姓名,电话,日期,分数,等级和insert语句

    #!/bin/bash#生成随机身份证号,性别,年龄,电话,姓名,日期,分数和对应等级,并生成insert语句#作者AiYS,2018-02-06,转载请注明http://www.cnblogs.co ...

随机推荐

  1. 03 . Prometheus监控容器和HTTP探针应用

    Eeporter是什么及来源? 是什么? 广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter.而Exporter的一个实例称为target,如下所示,Prom ...

  2. rgb格式颜色与#000000格式颜色的转换

    首先,#000000格式的颜色被成为十六进制颜色码: 6位数分为三组,每两位数一组,依次是红.黄.蓝颜色的强度: 而与此对应的,rgb(39,137,202)依次是十进制的红黄蓝颜色: 因此将rgb格 ...

  3. 使用jdk1.8 stream特性对参数名称进行排序

    在对外对接的时候,通常会碰到签名方式, 然后签名的时候,要求按照参数名称进行排序. 比如参数为 c=22&a=1, 需要将结果排序为a=1&c=22, 然后再进行别的运算. 可以使用j ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  5. docker 容器命令

    语法docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/ST ...

  6. LR脚本信息函数-lr_get_master_host_name

    lr_get_master_host_name() 返回Controller主机的名称. char * lr_get_master_host_name(); lr_get_master_host_na ...

  7. os:获取当前目录路径,上级目录路径,上上级目录路径

    import os '''***获取当前目录***''' print(os.getcwd()) print(os.path.abspath(os.path.dirname(__file__))) '' ...

  8. pycharm 配置 git 方法

    1.打开pycharm ,点击 file——Default-setting——version control 2.配置github账号密码 3.Path to Git executable中填写git ...

  9. vulstack红队评估(二)

    一.环境搭建: 1.根据作者公开的靶机信息整理: 靶场统一登录密码:1qaz@WSX     2.网络环境配置: ①Win2008双网卡模拟内外网: 外网:192.168.1.80,桥接模式与物理机相 ...

  10. vwware虚拟机网卡的三种模式

    这里在虚拟机中必须要保证右上角的两个勾选上 三种模式:简单一个比如宿主机器直接连接路由器上网,那虚拟机和宿主机器是一定的可以上外网,相当于虚拟机直接连接在路由器上面,虚拟机需要配置可以上外网的IP地址 ...