[数据生成器]UVA10054 The Necklace
应吴老师之邀,写了个数据生成器。
目前这个数据生成器可以保证生成的数据都是合法的,且效率也还不错。只是在建立普通连通图的时候zyy偷懒了,直接把所有点串起来从而保证图的连通。如果有大神有更好的方法请不吝指教,zyy不胜感谢~~
下面是代码:
1 #include<cstdio>
2 #include<ctime>
3 #include<cstring>
4 #include<cstdlib>
5 #include<cmath>
6 #include<vector>
7 using namespace std;
8 #define MAXN 40
9 #define MAXM 100
10
11 int A[MAXN+10][MAXN+10];
12 int d[MAXN+10];
13
14 int n, m;
15
16 int GetRand(int L, int R)
17 {
18 int Len = R - L + 1;
19 int Ret = rand() * rand() % Len + L;
20 return Ret;
21 }
22
23 inline void Addedge(int u,int v,int o)
24 {
25 A[u][v]+=o;A[v][u]+=o;
26 d[u]+=o;d[v]+=o;
27 m+=o;
28 }
29
30 void gen()
31 {
32 int i, j, k, t;
33 bool Again;
34 memset(A, 0, sizeof(A));
35 memset(d, 0, sizeof(d));
36 for(i=1;i<n;i++)//保证图的连通
37 {
38 A[i][i+1]++;A[i+1][i]++;
39 d[i]++;d[i+1]++;
40 }
41 for(i=1;i<=m-n+1;i++)//剩下的边随机连接
42 {
43 do{
44 j=GetRand(1,n);
45 k=GetRand(1,n);
46 if(j==k) continue;
47 A[j][k]++;A[k][j]++;
48 d[j]++;d[k]++;
49 break;
50 }while(true);
51 }
52 //调整边,使所有的顶点的度为偶数
53 for(i=1;i<=n;i++)
54 {
55 if(d[i]%2)//如果i点度为奇数,就再找一个度为奇数的点
56 {
57 for(j=i+1;j<=n;j++)
58 {
59 if(d[j]%2)
60 {
61 if(A[i][j])//i、j之间有边
62 {
63 if(d[i]!=1&&d[j]!=1)//i、j之间不止一条边,则删掉一条边
64 {
65 Addedge(i,j,-1);
66 break;
67 }
68 else
69 {
70 continue;
71 }
72 }
73 else//i、j之间没有边,则连接i、j
74 {
75 Addedge(i,j,1);
76 break;
77 }
78 }
79 }
80 if(j>n)
81 {
82 for(k=i+1;k<=n;k++)
83 {
84 if(d[k])
85 break;
86 }
87 t=k;//找一个度为奇数的顶点t
88 for(k=1;k<i;k++)//再找一个度为偶数的顶点k,若k与i、t不相连,则连接tk、ik
89 {
90 if(!A[t][k]&&!A[k][i])
91 {
92 Addedge(t,k,1);
93 Addedge(i,k,1);
94 break;
95 }
96 }
97 Again=false;
98 if(k>=i)//需要重新调整
99 {
100 for(t=1;t<=n;t++)//连接i与任意一个不相连的顶点t
101 {
102 if(!A[t][i]&&i!=t)
103 {
104 Addedge(t,i,1);
105 Again=true;
106 break;
107 }
108 }
109 if(t>n)//如果找不到这样的t,在确保图的连通的条件下删掉一条边
110 {
111 for(t=1;t<=n;t++)
112 {
113 if(d[t]>1)
114 {
115 Addedge(t,i,-1);
116 Again=true;
117 break;
118 }
119 }
120 }
121 }
122 if(Again)
123 i=0;
124 }
125 }
126 }
127 }
128
129
130 int main()
131 {
132 //freopen("data4.in","w",stdout);
133 srand(time(NULL));
134 int cas =10000;//GetRand(1, 1);
135 int i,j;
136 printf("%d\n", cas);
137 while(cas-- > 0)
138 {
139 n = GetRand(MAXN/5*3, MAXN);
140 m = GetRand(MAXM/5*3, MAXM);
141 gen();
142 printf("%d\n", m);
143 for(i=1;i<n;i++)
144 for(j=i+1;j<=n;j++)
145 while(A[i][j]-->0)
146 printf("%d %d\n",i,j);
147 }
148 return 0;
149 }
[数据生成器]UVA10054 The Necklace的更多相关文章
- Mockjs,模拟数据生成器
(推荐使用)Mock.js是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试. 提供了以下模拟功能: 1. 根据数据模板生成模拟数据. 2. 模拟Ajax请求,生成并返回模拟 ...
- UVA10054 The Necklace
UVA10054 The Necklace 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18806 [思路] 欧拉回路 ...
- [CF787D]遗产(Legacy)-线段树-优化Dijkstra(内含数据生成器)
Problem 遗产 题目大意 给出一个带权有向图,有三种操作: 1.u->v添加一条权值为w的边 2.区间[l,r]->v添加权值为w的边 3.v->区间[l,r]添加权值为w的边 ...
- 【BZOJ3671】【NOI2014】随机数据生成器(贪心)
[BZOJ3671][NOI2014]随机数据生成器(贪心) 题面 BZOJ 题解 前面的模拟 真的就是语文阅读理解题目 理解清楚题目意思 然后就会发现要求的就是一个贪心 从小往大枚举,检查当前数能不 ...
- 【awesome-dotnet-core-learning】(3)-Bogus-假数据生成器
[awesome-dotnet-core-learning](3)-Bogus-假数据生成器 简介 Bogus一个简单而强大的假数据生成器,用于C#,F#和VB.NET.从著名的faker.js移植过 ...
- 让前端独立于后端进行开发,模拟数据生成器Mock.js
让前端独立于后端进行开发,模拟数据生成器Mock.jsMock.js 是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试. Home · nuysoft/Mock Wiki ...
- HDU P3341 Lost's revenge 题解+数据生成器
Lost and AekdyCoin are friends. They always play "number game"(A boring game based on numb ...
- 【scikit-learn】06:make_blobs聚类数据生成器
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/kevinelstri/article/ ...
- 如何从0到1的构建一款Java数据生成器-第二章
前提 在上一章我们提到了并且解决了几只拦路虎,承上启下,下面我们一起来实现一款数据生成器. 对外API /** * @description: 本地数据生成API * @author: peter * ...
随机推荐
- NAO机器人开发环境配置
python python2.7用于NAO开发 https://www.python.org/downloads/release/python-2718/ python3.6用于其他程序测试. htt ...
- QT之鼠标事件
Widget.h: #ifndef WIDGET_H #define WIDGET_H #include<QWidget> #include<QMouseEvent> clas ...
- 一份尽可能全面的Go channel介绍
写在前面 针对目前网络上Go channel知识点较为分散(很难有单独的一份资料把所有知识点都囊括进来)的情况,在下斗胆站在巨人的肩膀上,总结了前辈的工作,并加入了自己的理解,形成了这篇文章.本文类似 ...
- Python定制化天气预报消息推送
sansui-Weather 代码码云 介绍 定制化天气预报消息推送(练手小脚本) Python脚本实现天气查询应用,提醒她注意保暖! 功能介绍 天气信息获取 当天天气信息提示 第二天天气信息提示 网 ...
- centos7无法访问虚拟机web服务
第一种: 先看下防火墙状态:firewall-cmd --state 关闭防火墙再试试:systemctl stop firewalld.service 第二种,不想关闭防火墙 放开http服务 fi ...
- 深入了解promise
1. Promise基础 什么是回调地狱? 当使用回调函数来进行事件处理的时候,如果嵌套多层回调函数的时候,就会出现回调地狱,例如: method1(function(err, result) { i ...
- pycharm下载安装教程
简介: 首先,PyCharm操作简便,拥有一般IDE具备强大的功能,既适合新手,也可以满足开发人员的专业开发需求,接下来介绍一下如何下载和安装pycharm. ### 一:Pycharm下载 1.首先 ...
- Vue.js之计算属性(computed)、属性监听(watch)与方法选项(methods)
vue.js官网:https://cn.vuejs.org/v2/guide/components-registration.html 一.计算属性-computed 1. 作用:能够避免数据冗余,通 ...
- 基于java处理.docx格式的word合并
如下实例是将 2.docx和3.docx合并,写到empty.docx中,不适用于.doc格式,public static void main(String[] args) { File file1 ...
- Ubuntu安装 php + apache + mysql
转载请注明来源:https://www.cnblogs.com/hookjc/ 1.安装SSH(必须) sudo apt-get install ssh 2.安装MySQL(虽然现在最新版为5.1,但 ...