Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. import networkx as nx
  2. import random
  3.  
  4. random.seed(0)
  5.  
  6. def biased_random_connected_bipartite(n, m, k):
  7. G = nx.Graph()
  8.  
  9. # These will be the two components of the bipartite graph
  10. N = set(range(n))
  11. M = set(range(n, n+m))
  12. G.add_nodes_from(N)
  13. G.add_nodes_from(M)
  14.  
  15. # Create a first random edge
  16. u0 = random.choice(tuple(N))
  17. v0 = random.choice(tuple(M))
  18. G.add_edge(u0, v0)
  19.  
  20. isolated_N = set(N-{u0})
  21. isolated_M = set(M-{v0})
  22. while isolated_N and isolated_M:
  23. # Pick any isolated node:
  24. isolated_nodes = isolated_N|isolated_M
  25. u = random.choice(tuple(isolated_nodes))
  26.  
  27. # And connected it to the existing connected graph:
  28. if u in isolated_N:
  29. v = random.choice(tuple(M-isolated_M))
  30. G.add_edge(u, v)
  31. isolated_N.remove(u)
  32. else:
  33. v = random.choice(tuple(N-isolated_N))
  34. G.add_edge(u, v)
  35. isolated_M.remove(u)
  36.  
  37. # Add missing edges
  38. for i in range(k-len(G.edges())):
  39. u = random.choice(tuple(N))
  40. v = random.choice(tuple(M))
  41. G.add_edge(u, v)
  42.  
  43. return G
  44.  
  45. B = biased_random_connected_bipartite(5, 6, 11)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement