Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1. class Cell:
  2. def __init__(self,v = None, next = None, prev = None, linked = None):
  3. self.val = v
  4. self.next = next
  5. self.prev = prev
  6. self.linked = linked
  7.  
  8. class ListDoublChain: # Declarer vide en tant que ListDoubleChain()
  9. # Creation du pointeur
  10. def __init__(self,firstCell = None,lastCell = None):
  11. self.first = firstCell
  12. self.last = lastCell
  13. self.size = 0
  14.  
  15. def push(self, val): # Ajouter une cellule au tout début de la liste chainee
  16. tmp = Cell(val)
  17.  
  18. tmp.next = self.first
  19.  
  20. if self.first != None: # Si on a bien deja une premiere cellule
  21. self.first.prev = tmp
  22. else: # Si on a une liste chainee entierement vidée sans cellule
  23. self.last = tmp # Le dernier et le premier element sont tmp
  24.  
  25. self.first = tmp
  26. self.size += 1
  27.  
  28. def push_fin(self, val): # Ajouter une cellule à la fin de la liste chainee
  29. tmp = Cell(val)
  30.  
  31. if self.first != None: # Si on a bien deja une premiere cellule
  32. self.last.next = tmp # Le dernier et le premier element sont tmp
  33. tmp.prev = self.last
  34.  
  35. else: # Si on a une liste chainee entierement vidée sans cellule
  36. self.first = tmp
  37.  
  38. self.last = tmp
  39. self.size += 1
  40.  
  41. def create_link(self, sommet, linked_values):
  42. i = 0
  43. encours = Cell()
  44. encours.next = self.first
  45. while encours.next != None:
  46. encours = encours.next # On passe à la cellule suivante
  47. i += 1
  48. if encours.val == sommet:
  49. encours.linked = linked_values
  50. return
  51. print("L'élément {} n'a pas été trouvé".format(sommet))
  52. return
  53.  
  54. def search(self, value):
  55. i = 0
  56. encours = Cell()
  57. encours.next = self.first
  58. while encours.next != None:
  59. encours = encours.next # On passe à la cellule suivante
  60. i += 1
  61. if encours.val == value:
  62. return True
  63. return False
  64.  
  65. def afficher(self):
  66. encours = Cell()
  67. encours = self.first
  68. if encours == None:
  69. print("La liste est vide")
  70. return
  71. while encours != None:
  72. print(encours.val, end = " ")
  73. encours = encours.next
  74.  
  75. def afficher_sommets(self):
  76. encours = Cell()
  77. encours = self.first
  78. print("---- AFFICHAGE DE LA LISTE DOUBLEMENT CHAINEE----")
  79. if encours == None:
  80. print("La liste est vide")
  81. return
  82. while encours != None:
  83. if encours.linked != None:
  84. print("{} : ".format(encours.val), end="")
  85. encours.linked.afficher()
  86.  
  87. print("\n" if encours.next != None else "")
  88. encours = encours.next
  89.  
  90. print("\n---- FIN AFFICHAGE ----")
  91.  
  92. def has_value_linked(self, sommet, val):
  93. encours = Cell()
  94. encours = self.first
  95. if encours == None:
  96. return False
  97. while encours != None:
  98. if encours.val == sommet:
  99. encours_links = Cell()
  100. encours_links = encours.linked.first
  101. while encours_links != None:
  102. if encours_links.val == val:
  103. return True
  104.  
  105. encours_links = encours_links.next
  106.  
  107. encours = encours.next
  108. return False
  109.  
  110.  
  111. def can_be_oriented_graph(self):
  112. encours_sommets = Cell()
  113. encours_sommets = self.first
  114. while encours_sommets != None: # On parcourt les sommets
  115. encours_links = Cell()
  116. encours_links = encours_sommets.linked.first
  117. while encours_links != None: # On parcourt les liens du sommet
  118. if not self.has_value_linked(encours_links.val, encours_sommets.val): # Si on tombe sur un sommet qui n'existe pas alors False
  119. return False
  120.  
  121. encours_links = encours_links.next
  122.  
  123. encours_sommets = encours_sommets.next
  124.  
  125. return True
  126.  
  127. def is_oriented_graph(A):
  128. for i in range(len(A)):
  129. for j in range(len(A[i])):
  130. if A[i][j] != A[j][i]:
  131. return False
  132. return True
  133.  
  134.  
  135. if __name__ == '__main__':
  136. sommets = ListDoublChain()
  137. sommets.push_fin(0)
  138. sommet0 = ListDoublChain()
  139. sommet0.push_fin(1)
  140. sommet0.push_fin(3)
  141.  
  142. sommets.push_fin(1)
  143. sommet1 = ListDoublChain()
  144. sommet1.push_fin(0)
  145. sommet1.push_fin(3)
  146.  
  147. sommets.push_fin(2)
  148. sommet2 = ListDoublChain()
  149. sommet2.push_fin(3)
  150.  
  151. sommets.push_fin(3)
  152. sommet3 = ListDoublChain()
  153. sommet3.push_fin(0)
  154. sommet3.push_fin(1)
  155. sommet3.push_fin(2)
  156.  
  157.  
  158. sommets.create_link(0,sommet0)
  159. sommets.create_link(1,sommet1)
  160. sommets.create_link(2,sommet2)
  161. sommets.create_link(3,sommet3)
  162.  
  163. sommets.afficher_sommets()
  164. print(sommets.can_be_oriented_graph())
  165. print("sep")
  166. #print(sommets.has_value_linked(3,2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement