Guest User

Untitled

a guest
Nov 10th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. from support import *
  4.  
  5. # EXERCICE 1
  6.  
  7. G = {
  8. "A" : { "F" : 35, "C" : 5 },
  9. "F" : { "G" : 13 },
  10. "G" : { },
  11. "E" : { "G" : 14 },
  12. "B" : { "E" : 15, "C" : 9 },
  13. "D" : { "A" : 3, "B" : 12 },
  14. "C" : { "F" : 8, "E" : 10 }
  15. }
  16.  
  17. # [v for v in G["A"]] represente l'ensemble des sommets relies à A.
  18. print(str([v for v in G["A"]]))
  19.  
  20. # EXERCICE 2
  21.  
  22. infini = float("inf")
  23.  
  24. def BFS(G, r, distance = False):
  25. global infini
  26. Couleur, Pere, Dist = dict(), dict(), dict()
  27. F = creer_file()
  28. for u in G:
  29. Couleur[u] = "Blanc"
  30. Pere[u] = None
  31. Dist[u] = infini
  32. enfiler(F, r)
  33. Couleur[r] = "Gris"
  34. Dist[r] = 0
  35. while not est_vide(F):
  36. u = tete(F)
  37. for v in G[u]:
  38. if Couleur[v] == "Blanc":
  39. Couleur[v] = "Gris"
  40. Dist[v] = Dist[u] + 1 * (1 - distance) + G[u][v] * distance
  41. Pere[v] = u
  42. enfiler(F, v)
  43. defiler(F)
  44. Couleur[u] = "Noir"
  45. return Dist
  46.  
  47. # Sans utiliser la vraie distance (distance en arcs)
  48. print(str(BFS(G, "A")))
  49. print(str(BFS(G, "D")))
  50. # L'algorithme ne donnera plus la vraie distance la plus courte :
  51. print(str(BFS(G, "D", True)))
  52.  
  53. # EXERCICE 3
  54.  
  55. def DFS(G, r):
  56. P = creer_pile()
  57. marque = {}
  58. parcours = []
  59. for u in G:
  60. marque[u] = False
  61. empiler(P, r)
  62. while not est_vide(P):
  63. u = sommet(P)
  64. desempiler(P)
  65. if not marque[u]:
  66. marque[u] = True
  67. parcours.append(u)
  68. for v in G[u]:
  69. if not marque[v]:
  70. empiler(P, v)
  71. return parcours
  72.  
  73. # Affichage du parcours en profondeur
  74. print(str(DFS(G, "A")))
  75. print(str(DFS(G, "D")))
  76.  
  77. # EXERCICE 4
  78.  
  79. def creerMatrice(G):
  80. import numpy as np
  81. liste = []
  82. for i in range(len(G.keys())):
  83. temp = []
  84. for j in range(len(G.keys())):
  85. temp.append(infini)
  86. liste.append(temp)
  87. sortedKeys = list(G.keys())
  88. sortedKeys.sort()
  89. for i, e in enumerate(sortedKeys):
  90. liste[i][i] = 0
  91. for j, v in enumerate(sortedKeys):
  92. if G[e].get(v, -1) != -1:
  93. liste[i][j] = G[e][v]
  94. return np.array(liste)
  95.  
  96. import numpy as np
  97.  
  98. def init_distances_min(n):
  99. global infini
  100. liste = [[0 if i == j else infini for j in range(n)] for i in range(n)]
  101. return np.array(liste)
  102.  
  103. def iterations(distances, distances_min):
  104. retourne = []
  105. global infini
  106. for i in range(len(distances)):
  107. temp = []
  108. for j in range(len(distances)):
  109. temp.append(infini)
  110. retourne.append(temp)
  111.  
  112. for i in range(len(distances)):
  113. for j in range(len(distances)):
  114. retourne[i][j] = min(distances_min[i][j], min([distances[i][t] + distances_min[t][j] for t in range(len(G))]))
  115.  
  116. return np.array(retourne)
  117.  
  118. def utiliserIterations(G):
  119. distances = creerMatrice(G)
  120. t = init_distances_min(len(G))
  121. for i in range(len(G)):
  122. t = iterations(distances, t)
  123. return t
  124.  
  125. def itineraire_min(G, A, B):
  126. carte = utiliserIterations(G)
Advertisement
Add Comment
Please, Sign In to add comment