生成连接的无向图脚本

时间:2014-04-25 16:49:59

标签: python python-2.7 graph

我尝试使用Python 2.7创建一个带有权重的连接,间接图。以下是我到目前为止写的剧本。

for i in xrange(0, 10):
    for j in xrange(0, (int)(10*random.random())):
        lst2 = random.sample(range(20), 1)
        j = [(i, lst2)]
        print(j)

我试图获得以下格式:x y w,其中(x,y)构成顶点而w是权重。目前我能够在生成我想要的数字时出现随机数量的x,但是我遇到的问题是试图生成我的y并使它们无法导致重复顶点(特别是在例如(1,3)和然后(3,1))。下面是我当前输出的一小部分。

   [(1, [6])]
[(1, [1])]
[(1, [15])]
[(1, [12])]
[(1, [16])]
[(2, [9])]
[(3, [10])]
[(3, [19])]
[(4, [17])]
[(4, [18])]
[(4, [17])]

如何在保持生成随机数量的x的同时保持顶点不重复?另外,我该如何添加重量?我尝试了以下操作,但结果只是生成了额外的对。

for i in xrange(0, 10):
    for j in xrange(0, (int)(10*random.random())):
        lst2 = random.sample(range(20), 1)
        lst3 = random.sample(range(10), 10)
        j = zip((i, lst2),lst3)
        print(j)

1 个答案:

答案 0 :(得分:0)

你可以这样做:

import random

nodeCount = 6
vertexCount = 10

vertices = {}
while len(vertices) < vertexCount:
    x = random.randint (1, nodeCount)
    y = random.randint (1, nodeCount)
    if x == y: continue
    #comment the following line if the graph is directed
    if y < x: x, y = y, x
    w = random.random ()
    vertices [x, y] = w

#just for debug
for (x, y), w in vertices.items ():
    print ('Vertex from {} to {} with weight {}.'.format (x, y, w) )