Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. import igraph as ig
  2. import matplotlib.pyplot as plt
  3. import timeit
  4. from memory_profiler import profile
  5.  
  6. N = 30
  7.  
  8. MM = [[0,1,0,0,0,0],
  9. [0,0,1,0,0,0],
  10. [0,0,0,1,0,0],
  11. [0,0,0,0,0,0],
  12. [0,0,0,0,0,1],
  13. [0,0,0,0,0,0]]
  14.  
  15. M = [[0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
  16. [1, 0, 1, 0, 0, 0, 1, 1, 1, 1],
  17. [1, 1, 0, 1, 0, 0, 0, 0, 0, 1],
  18. [1, 0, 1, 0, 1, 0, 0, 0, 0, 0],
  19. [1, 0, 0, 1, 0, 1, 0, 0, 0, 0],
  20. [1, 0, 0, 0, 1, 0, 1, 0, 0, 0],
  21. [1, 1, 0, 0, 0, 1, 0, 1, 0, 0],
  22. [0, 1, 0, 0, 0, 0, 1, 0, 1, 0],
  23. [0, 1, 0, 0, 0, 0, 0, 1, 0, 1],
  24. [0, 1, 1, 0, 0, 0, 0, 0, 1, 0]]
  25.  
  26. def smeh(ms):
  27. ss = []
  28. for i in range(len(ms[0])):
  29. for j in range(len(ms[0])):
  30. if ms[i][j] != 0:
  31. ss.append([i, j, ms[i][j]])
  32. return ss
  33.  
  34. #@profile
  35. def tre(n,M):
  36. m = M
  37. tre = [[0 for j in range(n)] for i in range(n)]
  38. if n < 10:
  39. for i in range(n):
  40. for j in range(n):
  41. tre[i][j] = m[i][j]
  42. else:
  43. for i in range(len(m)):
  44. for j in range(len(m)):
  45. tre[i][j] = m[i][j]
  46. for i in range(9, len(tre) - 1):
  47. tre[i + 1][i] = 1
  48. tre[i][i + 1] = 1
  49. k = 2
  50. for i in range(10, len(tre)):
  51. if i % 2 == 0:
  52. tre[k][i] = 1
  53. tre[i][k] = 1
  54. if i % 2 == 1:
  55. tre[k][i] = 1
  56. tre[i][k] = 1
  57. k = k + 1
  58. tre[k][i] = 1
  59. tre[i][k] = 1
  60. for i in range(len(tre)):
  61. for j in range(len(tre)):
  62. if tre[i][j] == 1:
  63. tre[j][i] = 0
  64. ss = smeh(tre)
  65. kk = []
  66.  
  67. for i in range(len(ss)):
  68. kk.append((ss[i][0], ss[i][1]))
  69. return kk,tre
  70.  
  71. def poisk_cmp_sv(M):
  72. result = []
  73. n = len(M)
  74. for i in range(n):
  75. a = []
  76. a.append(i)
  77. for j in range(n):
  78. if M[i][j] > 0:
  79. a.append(j)
  80. f = 0
  81. for k in a:
  82. for g in result:
  83. if k in g:
  84. f += 1
  85. result[result.index(g)] = add(a, g)
  86. if f == 0:
  87. result.append(a)
  88. return check(result)
  89.  
  90. def add(a, g):
  91. for i in a:
  92. if i not in g:
  93. g.append(i)
  94. return g
  95.  
  96. def check(result):
  97. n = len(result)
  98. for i in range(n):
  99. for j in range(len(result[i])):
  100. f = 0
  101. for k in range(i+1, n):
  102. if result[i][j] in result[k]:
  103. result[k] = add(result[i], result[k])
  104. result[i] = 'err'
  105. f = 1
  106. break
  107. if f == 1:
  108. break
  109. while 'err' in result:
  110. result.remove('err')
  111. return result
  112.  
  113.  
  114. def gpr(kk,N):
  115. G = ig.Graph(directed=False)
  116. G.add_vertices(N)
  117. G.vs['label'] = range(N)
  118. G.add_edges(kk)
  119. G.es['weight'] = [1 for i in range(N)]
  120. ig.plot(G, bbox=(300, 300), vertex_label_color='black',
  121. vertex_label_size=10, vertex_size=20, vertex_color='white',
  122. edge_width=[edge for edge in G.es['weight']])
  123. return 0
  124.  
  125.  
  126. if __name__ == "__main__":
  127. print(poisk_cmp_sv(MM))
  128. gpr(tre(N, M)[0],N)
  129. ss = smeh(MM)
  130. kk = []
  131. for i in range(len(ss)):
  132. kk.append((ss[i][0], ss[i][1]))
  133. gpr(kk,6)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement