概述
import 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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复