gen_graph.h - GaisaiYuno/data-generation GitHub Wiki

graph(图)

init():初始化。

print():输出,不带边权。

printw(l,r):输出带权边,权值在 [l,r] 之间。

shuffle():打乱边。

add_edge(p):添加边 p(p 是一个 std::pair,其 first 和 second 元素代表了边的两个节点)。

add_edge(x,y):添加边 (x,y)。

check(p):检查边 p 是否存在。

函数

random_tree(n):生成一棵 n 个节点的树。

random_graph(n,m,is_connect,has_same_edge,has_loop):生成一张 n 个节点,m 条边的图,is_connect, has_same_edge, has_loop 分别代表是否连通,是否有重边,是否有自环。

random_edge(n,has_loop):生成一条端点在 [1,n] 之间的边,has_loop 代表是否有自环。

chain(n):生成一条有 n 个节点的链。

jhgraph(n,nd):生成一个 n 节点菊花图,中心节点为 nd。

random_dag(n,m,has_same_loop):生成一张 n 个节点,m 条边的 DAG (有向无环图),has_same_edge 代表是否有重边。

举例

#include <bits/stdc++.h>
#include "random.h"
#include "gen_graph.h" 
using namespace std;
int main(){
	int n=10,m=30;
	graph g;
	g=chain(n);
	g.add_edge(make_pair(1,n));
	g.print(); //生成一个环
	g=random_graph(n,m);
	g.shuffle();
	g.printw(0,1e9); //生成一张边权在 [0,1e9] 之间的连通、无重边、无自环的图,并打乱输出
	g=random_graph(n,m,1,1,1);
	g.shuffle();
	g.printw(0,1e9); //生成一张边权在 [0,1e9] 之间的连通、有重边、有自环的图,并打乱输出
	return 0;
}