复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53import copy import math from random import shuffle as sl from random import randint as rd def gn(): # 生成1到1000的一个随机数 num = rd(1, 1000) return num def w2f(f, num, fg): # 将num写入文件f,并根据fg的值决定是否换行 f.write(str(num)) if fg == True: f.write('n') else: f.write(' ') def DataMake(c): # 生成DAG,存入以c命名的文件内 f = open('data' + str(c) + '.in', 'w') n = 5 # 设置图中节点数量 node = range(0, n) # 生成1到n的一个序列 node = list(node) # 将格式转换成list,便于下一步随机重排 sl(node) # 随机重排,生成节点的序号。在这里,node[i]的值表示节点,i表示当前节点的拓扑序。 m = 0 #图中边的数量 for i in range(n): #根据拓扑序列生成边 p1 = node[i] # 取起点节点 m1 = rd(1, max(1, n-i-1)) #随机生成当前节点连接边 m += m1 p2_list = [] # # 选择第二个节点,这个节点的拓扑序必须大于第一个节点 can_list = copy.deepcopy(node[i+1:]) #可选候选集 while(len(p2_list) < m1 and i != n-1): c1 = rd(0, len(can_list)-1) #随机抽取索引 if can_list[c1] not in p2_list: p2_list.append(can_list[c1]) else: can_list.remove(can_list[c1]) for j in range(len(p2_list)): w2f(f, p1, 0) w2f(f, p2_list[j], 1) w2f(f, n, 0) w2f(f, m-1, 1) # 将节点数量n和边的数量m写入文件f print(n, ' node', m-1, ' edges') f.close() DataMake(1) # 生成一个名为data1.in的文件,里面存储的就是一个DAG print('Done')
最后
以上就是土豪店员最近收集整理的关于Python构建有向无环图DAG的全部内容,更多相关Python构建有向无环图DAG内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复