Guest User

Untitled

a guest
Jun 24th, 2018
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. finishing_time = {}
  2.  
  3. class Graph:
  4. def __init__(self):
  5. self.adj_list = []
  6.  
  7. def adj_list(self):
  8. return self.adj_list
  9.  
  10. def adj_addnode(self):
  11. self.adj_list.append([])
  12.  
  13. def adj_addedge(self,srcNode,goalNode):
  14. self.adj_list[srcNode].append(goalNode)
  15.  
  16.  
  17. def read_adjmatrix():
  18. adjmatrix = []
  19. f = open("matrix.txt","r")
  20. line=f.readline()
  21. while line:
  22. line=line.split(',')
  23. for index, item in enumerate(line):
  24. line[index] = eval(item)
  25. adjmatrix.append(line)
  26. line = f.readline()
  27. f.close()
  28. #print(adjmatrix)
  29. return adjmatrix
  30.  
  31. def matrix_to_list():
  32. adjMatrix = read_adjmatrix()
  33. #print(adjMatrix)
  34. G = Graph()
  35. for i in range(len(adjMatrix)):
  36. #print(len(adjMatrix))
  37. G.adj_addnode()
  38. for j in range(len(adjMatrix)):
  39. #print(len(adjMatrix))
  40. if(adjMatrix[i][j]==1):
  41. G.adj_addedge(i,j)
  42. adjList = G.adj_list
  43. #print(adjList)
  44. return adjList
  45.  
  46. def list_to_reverse_graph():
  47. matrix = []
  48. adjlist = matrix_to_list()
  49. number_of_zero = len(adjlist)
  50. for i in range(number_of_zero):
  51. matrix.append([0]*number_of_zero)
  52. # print(matrix)
  53. for a in range(len(adjlist)):
  54. for b in range(len(adjlist[a])):
  55. matrix[adjlist[a][b]][a] = 1
  56. list1 = []
  57. for a in range(len(matrix)):
  58. list1.append([])
  59. for b in range(len(matrix)):
  60. if matrix[a][b] == 1:
  61. list1[a].append(b)
  62.  
  63. dict1 ={}
  64. for k,v in enumerate(list1):
  65. dict1[k] =v
  66. #print(dict1)
  67. return dict1
  68.  
  69. def topological_sort():
  70. #isrev=1 is reversed graph;isrerev=0 is original graph
  71. list1 = matrix_to_list()
  72. graph ={}
  73. for k,v in enumerate(list1):
  74. graph[k] =v
  75.  
  76. is_visit = dict((node,False) for node in graph )
  77. order = []
  78.  
  79. def dfs(graph,start_node):
  80.  
  81. for end_node in graph[start_node]:
  82. if not is_visit[end_node]:
  83. is_visit[end_node] = True
  84. dfs(graph,end_node)
  85. order.append(start_node)
  86.  
  87. for start_node in graph:
  88. if not is_visit[start_node]:
  89. is_visit[start_node] = True
  90. dfs(graph,start_node)
  91. #order.append(" ")
  92. return order
  93.  
  94. def topological_reverse_sort():
  95. #isrev=1 is reversed graph;isrerev=0 is original graph
  96. graph = list_to_reverse_graph()
  97. order_list = topological_sort()
  98. #print(order_list)
  99. is_visit = dict((node,False) for node in graph )
  100. order = []
  101.  
  102. def dfs(graph,start_node):
  103.  
  104. for end_node in graph[start_node]:
  105. if not is_visit[end_node]:
  106. is_visit[end_node] = True
  107. dfs(graph,end_node)
  108. order.append(start_node)
  109.  
  110. for i in range(len(order_list)-1,-1,-1):
  111. start_node=order_list[i]
  112. if not is_visit[start_node]:
  113. is_visit[start_node] = True
  114. dfs(graph,start_node)
  115. order.append(" ")
  116. #print(order)
  117. return order
  118.  
  119. def sep_list():
  120. list1 = topological_reverse_sort()
  121. #print(list1)
  122. list2=[]
  123. c = 0
  124. a=0
  125. for i in range(len(list1)):
  126. if list1[i] == " " :
  127. list2.append( list1[a:i])
  128. c +=1
  129. a = i+1
  130. for i in range(len(list2)):
  131. list2[i].sort()
  132. #print(list2)
  133. return list2
  134.  
  135.  
  136.  
  137. def main():
  138. a = sep_list()
  139. f=open("components.txt","w")
  140. for i in range(len(a)):
  141. for j in range(len(a[i])):
  142. if j >=len(a[i])-1:
  143. f.write(str(a[i][j]))
  144. else:
  145. f.write(str(a[i][j])+",")
  146. f.write("\n")
  147. f.close()
  148.  
  149. main()
Add Comment
Please, Sign In to add comment