Guest User

Untitled

a guest
May 21st, 2019
62
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #importation des modules pythons
  2. import random as r
  3. import tkinter as tki
  4. from math import *
  5. import copy
  6.  
  7.  
  8. #crée des noeuds a des positions aléatoires
  9. def coo (n,min):
  10. res=[]
  11. for i in range (n):
  12. x=r.randint (100,900)
  13. y=r.randint (100,900)
  14. while espace (x,y,min,res):
  15. x=r.randint (100,900)
  16. y=r.randint (100,900)
  17. # print (i)
  18. res.append([x,y])
  19. return (res)
  20.  
  21.  
  22. #teste l'espacement entre un point et tous ceux déjà générés
  23. def espace (x,y,min,res):
  24. bool=False
  25. for j in range (len (res)):
  26. if sqrt((x-res[j][0])**2+(y-res[j][1])**2)<4*min:
  27. bool=True
  28. return (bool)
  29.  
  30.  
  31. #infini est la somme de tous les chemins+1, aucun chemin ne peut depasser cette longueur ce qui suffit à représenter l'infini pour dijkstra
  32. def infini (mat):
  33. inf=0
  34. for i in range (len (mat)):
  35. for j in range (len (mat)):
  36. inf=inf+mat[i][j]
  37. return (inf)
  38.  
  39.  
  40. #distance entre 2 points a et b
  41. def distance (a,b):
  42. return (sqrt((a[0]-b[0])**2+(a[1]-b[1])**2))
  43.  
  44.  
  45. #matrice des distances
  46. def distances (coos):
  47. n=len (coos)
  48. mat=[[0 for i in range (n)]for j in range (n)]
  49. for i in range (n):
  50. for j in range (n):
  51. mat[i][j] = distance (coos[i],coos[j])
  52. return mat
  53.  
  54.  
  55. #trouve les indices de nb points les plus proches
  56. def indi_min (m,nb):
  57. n=len (m)
  58. infi=infini (m)
  59. minis=[[0 for i in range (nb)]for j in range (n)]
  60. for i in range (n):
  61. mini=[infi for k in range (nb)]
  62. for j in range (n):
  63. k=0
  64. pasmin=True
  65. while k<nb and pasmin:
  66. if mini[k]>m[i][j]:
  67. mini[k]=m[i][j]
  68. minis[i][k]=j
  69. pasmin=False
  70. k=k+1
  71. return (minis)
  72.  
  73.  
  74. #crée une matrice d'adjacence a partir des coordonnées des noeuds
  75. def init2 (nb,coos):
  76. n=len(coos)
  77. dist=distances (coos)
  78. res=[[0 for i in range (n)]for j in range (n)]
  79. indimin= indi_min (dist,nb)
  80. for i in range (n):
  81. for j in range (n):
  82. for k in range (nb):
  83. if indimin[i][k]== j:
  84. res[i][j]=dist[i][j]
  85. res[j][i]=dist[i][j]
  86. return res
  87.  
  88.  
  89. #affiche le graphe
  90. def affichage (coos,r,nb):
  91. wdw=tki.Tk ()
  92. wdw.title ("test")
  93. wdw.geometry ("1400x1000")
  94. wdw.config(background="#8CCCFE") #bleu pale
  95. wdw.maxsize (1400,1000)
  96. wdw.minsize (1400,1000)
  97. boite =tki.Frame (wdw,width=400,height=1000,bg="#8CCCFE")
  98. canvas=tki.Canvas (wdw,width=1000,height=1000,bg="#D0EAFE") #bleu pale clair
  99. n=len(coos)
  100. m=init2 (nb,coos)
  101. for i in range (n):
  102. for j in range (1+i,n):
  103. if m[i][j]>0:
  104. x1=coos[i][0]
  105. y1=coos[i][1]
  106. x2=coos[j][0]
  107. y2=coos[j][1]
  108. canvas.create_line (x1,y1,x2,y2,width=2)
  109. for i in range (n):
  110. x=coos[i][0]
  111. y=coos[i][1]
  112. canvas.create_oval (x+r,y+r,x-r,y-r,fill="red")
  113. #canvas.pack (fill="both",expand=tki.YES)
  114. canvas.pack (side="left")
  115. chemins=tki.Label(boite,text= "Générer le trafic",font=("Arial",30),bg="#8CCCFE",fg="white")
  116. chemins.pack(expand=tki.YES)
  117. nombr=tki.Entry(boite,font=("Arial",30),fg="#8CCCFE")
  118. nombr.pack(expand=tki.YES)
  119. trafftext= "générer"
  120. traff=tki.Button(boite,text= trafftext,font=("Arial",30),fg="#8CCCFE",command=print(m))
  121. traff.pack()
  122. boite.pack (side="right",expand=tki.YES)
  123. wdw.mainloop ()
  124.  
  125.  
  126. #affiche un graphe àléatoire
  127. def affich_rand (n,r,nb):
  128. return (affichage (coo (n,r),r,nb))
  129.  
  130.  
  131. #dijkstra c'est pas moi qui l'ai fait, je l'ai trouvé ici: http://www.alcandre.net/uploads/TD-dijkstra.pdf
  132.  
  133. #trouve la première ligne du tableau de l'algorithme de dijkstra
  134. def ligneInit(Graphe,depart) :
  135. L = []
  136. n = len(Graphe)
  137. for j in range(n) :
  138. poids = Graphe[depart][j]
  139. if poids :
  140. L.append([ poids, depart ])
  141. else :
  142. L.append(False)
  143. return [L]
  144.  
  145.  
  146. #determine le prochain sommet que doit traiter dijkstra
  147. def SommetSuivant(T, S_marques) :
  148. L = T[-1]
  149. n = len(L)
  150. min = False
  151. for i in range(n) :
  152. if not(i in S_marques) :
  153. if L[i]:
  154. if not(min) or L[i][0] < min :
  155. min = L[i][0]
  156. marque = i
  157. return(marque)
  158.  
  159.  
  160. def ajout_ligne(T,S_marques,Graphe) :
  161. # Ajoute une ligne supplémentaire au tableau
  162. L = T[-1]
  163. n = len(L)
  164. # La prochaine ligne est une copie de la précédente,
  165. # dont on va modifier quelques valeurs.
  166. Lnew = L.copy()
  167. # sommet dont on va étudier les voisins
  168. S = S_marques[-1]
  169. # la longueur du (plus court) chemin associé
  170. long = L[S][0]
  171. for j in range(n) :
  172. if j not in S_marques:
  173. poids = Graphe[S][j]
  174. if poids :
  175. # si l’arète (S,j) est présente
  176. if not(L[j]) : # L[j] = False
  177. Lnew[j] = [ long + poids, S ]
  178. else :
  179. if long + poids < L[j][0] :
  180. Lnew[j] = [ long + poids, S ]
  181. T.append(Lnew)
  182. # Calcul du prochain sommet marqué
  183. S_marques.append(SommetSuivant(T, S_marques))
  184. return T, S_marques
  185.  
  186.  
  187. #calcule le tableau de l'algorithme de Dijkstra
  188. def calcule_tableau(Graphe, depart) :
  189. n = len(Graphe)
  190. T=[[False] *n]
  191. T[0][depart] = [depart, 0]
  192. S_marques = [ depart ]
  193. while len(S_marques) < n :
  194. T, S_marques = ajout_ligne(T, S_marques, Graphe)
  195. return T
  196.  
  197.  
  198. #Calcul du plus court chemin entre 2 noeud
  199. def plus_court_chemin(Graphe, depart, arrivee) :
  200. n = len(Graphe)
  201. T = calcule_tableau (Graphe,depart)
  202. C = [ arrivee ]
  203. while C[-1] != depart :
  204. C.append( T[-1][ C[-1] ][1] )
  205. C.reverse()
  206. return C
  207.  
  208.  
  209. #assigne au chemin une nouvelle longueur d'onde
  210. def assigne_lambda (chemin,lambd):
  211. for i in range (len(chemin)):
  212. chemin[i][1].append(lambd)
  213. return chemin
  214.  
  215.  
  216. #fait une liste de k chemin dans un graphe de taille n
  217. def trafic (k,n):
  218. res=[]
  219. for i in range (k):
  220. a=0
  221. b=0
  222. while a==b:
  223. a=r.randint(0,n-1)
  224. b=r.randint(0,n-1)
  225.  
  226. res.append([a,b])
  227. return res
  228.  
  229.  
  230. #découpe un chemin en parcours neud a neud sous forme de liste de couple, example abcd devient ab,bc,cd
  231. def decoupe (chemin):
  232. res = []
  233. n=len(chemin)
  234. for i in range (n-1):
  235. if chemin[i]<chemin[i+1]:
  236. res.append([chemin[i],chemin[i+1]])
  237. else:
  238. res.append([chemin[i+1],chemin[i]])
  239.  
  240. return res
  241.  
  242.  
  243. #transforme les liste de liste de liste en liste de liste
  244. def flatten (l):
  245. res=[]
  246. n=len (l)
  247. for i in range (n):
  248. for j in range (len(l[i])):
  249. res.append (l[i][j])
  250. return (res)
  251.  
  252.  
  253. #compte le nombre de longueurs d'onde qui passe dans chaque dans chaques fibres
  254. def compte (l):
  255. res=[]
  256. n=len(l)
  257. for i in range (n):
  258. dejacompte =False
  259. for j in range (len(res)):
  260. if l[i]==res[j][1] and not dejacompte:
  261. res[j][0]=res[j][0]+1
  262. dejacompte=True
  263. if not dejacompte:
  264. res.append([1,l[i]])
  265. return res
  266.  
  267.  
  268. graphetest= [[0.0, 0, 0, 0, 0, 0, 0, 0, 102.39140588936164, 0, 0, 0, 0, 143.8923208513922, 0, 0, 0, 0, 0, 0],[0, 0.0, 0, 116.06894502837527, 0, 0, 0, 0, 0, 0, 0, 187.09623192357455, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0.0, 0, 110.3177229641729, 0, 0, 0, 0, 0, 0, 0, 0, 207.99278833651903, 0, 0, 0, 0, 0, 0], [0, 116.06894502837527, 0, 0.0, 0, 0, 0, 0, 0, 0, 312.8338217009152, 142.00352108310554, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 110.3177229641729, 0, 0.0, 182.21415971323415, 251.03187048659777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182.21415971323415, 0.0, 265.75364531836624, 0, 0, 0, 392.3633520093333, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 251.03187048659777, 265.75364531836624, 0.0, 0, 0, 0, 127.09838708654017, 290.5580836941213, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 357.4758733117523, 241.51397475094478, 158.90248582070703, 0, 0, 0, 0, 0, 335.5964838909967, 0], [102.39140588936164, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 125.7179382586272, 0, 0, 139.74262055650738, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 115.52056094046635, 0, 0, 136.85028315644803, 0, 0, 0, 0], [0, 0, 0, 312.8338217009152, 0, 392.3633520093333, 127.09838708654017, 357.4758733117523, 0, 0, 0.0, 182.47739586041882, 0, 0, 0, 0, 0, 0, 0, 0], [0, 187.09623192357455, 0, 142.00352108310554, 0, 0, 290.5580836941213, 241.51397475094478, 0, 0, 182.47739586041882, 0.0, 395.08100435227203, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 158.90248582070703, 0, 115.52056094046635, 0, 395.08100435227203, 0.0, 0, 0, 0, 0, 270.2480342204176, 0, 134.6291201783626], [143.8923208513922, 0, 207.99278833651903, 0, 0, 0, 0, 0, 125.7179382586272, 0, 0, 0, 0, 0.0, 148.92951352905172, 0, 0, 0, 161.40012391568973, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148.92951352905172, 0.0, 0, 157.20368952413298, 240.6595105122588, 135.83077707206124, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 136.85028315644803, 0, 0, 0, 0, 0, 0.0, 0, 0, 288.36088500349695, 139.84276885130672], [0, 0, 0, 0, 0, 0, 0, 0, 139.74262055650738, 0, 0, 0, 0, 0, 157.20368952413298, 0, 0.0, 0, 286.9233347080715, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270.2480342204176, 0, 240.6595105122588, 0, 0, 0.0, 211.6341182323871, 283.0282671395209], [0, 0, 0, 0, 0, 0, 0, 335.5964838909967, 0, 0, 0, 0, 0, 161.40012391568973, 135.83077707206124, 288.36088500349695, 286.9233347080715, 211.6341182323871, 0.0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134.6291201783626, 0, 0, 139.84276885130672, 0, 283.0282671395209, 0, 0.0]]
  269.  
  270.  
  271. traftest =[[19, 12], [2, 4], [9, 2], [10, 8], [15, 2], [11, 0], [1, 2], [11, 2], [10, 17], [7, 5], [19, 12], [13, 8], [0, 7], [11, 12], [7, 10], [10, 11], [11, 10], [11, 9], [15, 8], [9, 1], [4, 14], [9, 12], [3, 17], [11, 7], [9, 13], [15, 13], [7, 16], [18, 19], [5, 18], [5, 11], [17, 18], [14, 4], [19, 19], [10, 15], [9, 10], [17, 3], [11, 19], [18, 9], [5, 12], [4, 13], [18, 4], [6, 15], [15, 5], [17, 14], [5, 14], [0, 9], [14, 0], [11, 17], [18, 8], [19, 11], [7, 10], [18, 5], [0, 15], [9, 5], [5, 16], [2, 8], [1, 10], [4, 7], [16, 6], [5, 13]]
  272.  
  273.  
  274. #applique la methode de Barony Bayvel
  275. def BaronyBayvel (graphe,limite,traf):
  276. n=len (traf)
  277. chemins=[]
  278. g=copy.deepcopy (graphe)
  279. for k in range (n):
  280. chemins.append (decoupe(plus_court_chemin(g,traf[k][0],traf[k][1])))
  281. densite=compte(flatten(chemins))
  282. for i in range (len(densite)):
  283. if densite[i][0]>=limite:
  284. g[densite[i][1][0]][densite[i][1][1]]=0
  285. g[densite[i][1][1]][densite[i][1][0]]=0
  286. return chemins
  287.  
  288.  
  289.  
  290. graphetest2=[[0.0, 0, 0, 0, 0, 0, 0, 0, 102.39140588936164, 0, 0, 0, 0, 143.8923208513922, 0, 0, 0, 0, 0, 0], [0, 0.0, 0, 116.06894502837527, 0, 0, 0, 0, 0, 0, 0, 187.09623192357455, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 116.06894502837527, 0, 0.0, 0, 0, 0, 0, 0, 0, 312.8338217009152, 142.00352108310554, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0.0, 182.21415971323415, 251.03187048659777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182.21415971323415, 0.0, 265.75364531836624, 0, 0, 0, 392.3633520093333, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 251.03187048659777, 265.75364531836624, 0.0, 0, 0, 0, 127.09838708654017, 290.5580836941213, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 357.4758733117523, 241.51397475094478, 158.90248582070703, 0, 0, 0, 0, 0, 335.5964838909967, 0], [102.39140588936164, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 125.7179382586272, 0, 0, 139.74262055650738, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 115.52056094046635, 0, 0, 136.85028315644803, 0, 0, 0, 0], [0, 0, 0, 312.8338217009152, 0, 392.3633520093333, 127.09838708654017, 357.4758733117523, 0, 0, 0.0, 182.47739586041882, 0, 0, 0, 0, 0, 0, 0, 0], [0, 187.09623192357455, 0, 142.00352108310554, 0, 0, 290.5580836941213, 241.51397475094478, 0, 0, 182.47739586041882, 0.0, 395.08100435227203, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 158.90248582070703, 0, 115.52056094046635, 0, 395.08100435227203, 0.0, 0, 0, 0, 0, 270.2480342204176, 0, 134.6291201783626], [143.8923208513922, 0, 0, 0, 0, 0, 0, 0, 125.7179382586272, 0, 0, 0, 0, 0.0, 148.92951352905172, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148.92951352905172, 0.0, 0, 157.20368952413298, 240.6595105122588, 135.83077707206124, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 136.85028315644803, 0, 0, 0, 0, 0, 0.0, 0, 0, 288.36088500349695, 139.84276885130672], [0, 0, 0, 0, 0, 0, 0, 0, 139.74262055650738, 0, 0, 0, 0, 0, 157.20368952413298, 0, 0.0, 0, 286.9233347080715, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270.2480342204176, 0, 240.6595105122588, 0, 0, 0.0, 211.6341182323871, 283.0282671395209], [0, 0, 0, 0, 0, 0, 0, 335.5964838909967, 0, 0, 0, 0, 0, 0, 135.83077707206124, 288.36088500349695, 286.9233347080715, 211.6341182323871, 0.0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134.6291201783626, 0, 0, 139.84276885130672, 0, 283.0282671395209, 0, 0.0]]
  291.  
  292.  
  293.  
  294. resultat= [[[12, 19]], [[2, 4]], [[9, 15], [15, 18], [13, 18], [2, 13]], [[6, 10], [4, 6], [2, 4], [2, 13], [8, 13]], [[15, 18], [13, 18], [2, 13]], [[7, 11], [7, 18], [13, 18], [0, 13]], [[1, 11], [6, 11], [4, 6], [2, 4]], [[6, 11], [4, 6], [2, 4]], [[7, 10], [7, 12], [12, 17]], [[7, 10], [5, 10]], [[12, 19]], [[8, 13]], [[0, 13], [13, 18], [7, 18]], [[11, 12]], [[7, 10]], [[10, 11]], [[10, 11]], [[11, 12], [9, 12]], [[15, 18], [13, 18], [8, 13]], [[9, 12], [11, 12], [1, 11]], [[2, 4], [2, 13], [13, 14]], [[9, 12]], [[3, 11], [11, 12], [12, 17]], [[7, 11]], [[9, 15], [15, 18], [13, 18]], [[15, 18], [13, 18]], [[7, 18], [16, 18]], [[15, 18], [15, 19]], [[4, 5], [2, 4], [2, 13], [13, 18]], [[5, 6], [6, 11]], [[17, 18]], [[13, 14], [2, 13], [2, 4]], [], [[7, 10], [7, 12], [9, 12], [9, 15]], [[9, 12], [7, 12], [7, 10]], [[12, 17], [11, 12], [3, 11]], [[11, 12], [12, 19]], [[15, 18], [9, 15]], [[5, 10], [7, 10], [7, 12]], [[2, 4], [2, 13]], [[13, 18], [2, 13], [2, 4]], [[6, 10], [7, 10], [7, 12], [9, 12], [9, 15]], [[15, 18], [13, 18], [2, 13], [2, 4], [4, 5]], [[14, 17]], [[4, 5], [2, 4], [2, 13], [13, 14]], [[0, 13], [13, 18], [15, 18], [9, 15]], [[13, 14], [0, 13]], [[11, 12], [12, 17]], [[13, 18], [8, 13]], [[12, 19], [11, 12]], [[7, 10]], [[13, 18], [2, 13], [2, 4], [4, 5]], [[0, 13], [13, 18], [15, 18]], [[9, 12], [7, 12], [7, 10], [5, 10]], [[4, 5], [2, 4], [2, 13], [8, 13], [8, 16]], [[2, 13], [8, 13]], [[1, 11], [10, 11]], [[4, 6], [6, 10], [7, 10]], [[8, 16], [8, 13], [2, 13], [2, 4], [4, 6]], [[4, 5], [2, 4], [2, 13]]]
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302. #initialise l'assignement de longeur d'onde
  303. def InitAssigneLO (l):
  304. l=flatten(l)
  305. res=[]
  306. n=len(l)
  307. for i in range (n):
  308. dejacompte =False
  309. for j in range (len(res)):
  310. if l[i]==res[j][1] and not dejacompte:
  311. dejacompte=True
  312. if not dejacompte:
  313. res.append([[],l[i]])
  314. return res
  315.  
  316.  
  317. #verifie si un élément est dans une liste
  318. def estdedans (l,e):
  319. n=len (l)
  320. bool=False
  321. for i in range (n):
  322. if l[i]==e:
  323. bool=True
  324. return bool
  325.  
  326.  
  327. #trouve la position d'un élement dans une liste
  328. def indice (l,e):
  329. for k in range (len (l)):
  330. if l[k]==e:
  331. return k
  332.  
  333.  
  334. #fonction qui simplifi une liste pour facilité l'assignement de longueurs d'onde
  335. def simplifi (l,i):
  336. res=[]
  337. for k in range (len(l)):
  338. res.append(l[k][i])
  339. return res
  340.  
  341.  
  342. #algorithme d'assignement de longueurs d'ondes
  343. def AssigneLO (l):
  344. res=[]
  345. dejaassigne=InitAssigneLO (l)
  346. indices=simplifi (dejaassigne,1)
  347. n=len (l)
  348. for i in range (n):
  349. m=len(l[i])
  350. lambd=0
  351. k=0
  352. while k<m:
  353. if estdedans(dejaassigne[indice(indices,l[i][k])][0],lambd):
  354. lambd=lambd+1
  355. k=0
  356. else :
  357. k=k+1
  358. for j in range (m):
  359. dejaassigne[indice(indices,l[i][j])][0].append(lambd)
  360. res.append([lambd,l[i]])
  361. return res
  362.  
  363.  
  364.  
  365. #nombres de longueurs d'onde utilisées
  366. def nombreLO (l):
  367. aux=[]
  368. n=len(l)
  369. for i in range (n):
  370. if not estdedans (aux,l[i]):
  371. aux.append(l[i])
  372. res=len(aux)
  373. return (res)
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380. graphetipe=[[0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135.79396157414365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154.20765220960988, 0, 0, 0, 0, 0, 0], [0, 0.0, 0, 0, 134.3726162579266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141.98943622678414, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152.27934856703322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185.64751546950473, 0, 0, 0, 0], [0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218.00917411888886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129.9576854210631], [0, 134.3726162579266, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201.1889659002203, 0, 0, 0, 0, 0, 0, 146.102703602637, 0], [0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130.36103712382777, 0, 141.12760183606892, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 121.8031198286809, 0, 0, 0, 0, 0, 0, 186.59314028120113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 147.00340132119393, 0, 0, 0, 0, 0, 121.10326172320876, 0, 0, 0, 0, 0, 0, 0, 146.23952953972466, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 148.32734070291963, 0, 0, 0, 0, 168.4339633209407, 0, 0, 0, 0, 263.5773131360133, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151.38031576133008, 0, 162.8158468945821, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140.80127840328723, 223.0807028857494, 0], [0, 0, 0, 0, 0, 0, 121.8031198286809, 147.00340132119393, 0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 167.7647161950331, 0, 0, 0, 0, 0, 221.0701246211256, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 244.78970566590417, 0, 140.1606221447379, 0, 0, 0, 0, 0, 0, 187.13097017864254, 0, 0, 0], [135.79396157414365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 125.80143083447024, 0, 0, 0, 0, 0, 193.8762491900439, 0, 0, 314.6966793596653, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 123.0690862889621, 0, 0, 0, 0, 0, 172.18594600024707, 0, 0, 0, 0, 0, 0], [0, 0, 152.27934856703322, 0, 0, 0, 0, 0, 148.32734070291963, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 138.03260484392808, 0, 0, 0, 0, 305.00491799313664, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133.3641631023867, 0, 241.3503677229434], [0, 0, 0, 0, 0, 0, 0, 121.10326172320876, 0, 0, 0, 0, 244.78970566590417, 125.80143083447024, 123.0690862889621, 0, 0, 0.0, 0, 0, 0, 0, 0, 269.462427807663, 0, 0, 0, 0, 0, 0], [0, 0, 0, 218.00917411888886, 0, 0, 186.59314028120113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 181.4717608885746, 0, 0, 0, 0, 219.65882636488797, 0, 0, 196.4001018329675, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167.7647161950331, 140.1606221447379, 0, 0, 0, 0, 0, 181.4717608885746, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 278.4690287985362, 0], [0, 0, 0, 0, 0, 0, 0, 0, 168.4339633209407, 0, 0, 0, 0, 0, 0, 138.03260484392808, 0, 0, 0, 0, 0.0, 0, 171.71196813268432, 0, 288.1700886629284, 0, 0, 0, 0, 0], [0, 141.98943622678414, 0, 0, 201.1889659002203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0, 0, 317.9701243827791, 0], [0, 0, 0, 0, 0, 130.36103712382777, 0, 0, 0, 151.38031576133008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171.71196813268432, 0, 0.0, 0, 131.24404748406687, 0, 0, 0, 0, 0], [154.20765220960988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193.8762491900439, 172.18594600024707, 0, 0, 269.462427807663, 0, 0, 0, 0, 0, 0.0, 0, 0, 143.42245291445826, 0, 0, 0], [0, 0, 0, 0, 0, 141.12760183606892, 0, 0, 0, 162.8158468945821, 0, 0, 0, 0, 0, 0, 0, 0, 219.65882636488797, 0, 288.1700886629284, 0, 131.24404748406687, 0, 0.0, 0, 0, 0, 0, 143.8923208513922], [0, 0, 185.64751546950473, 0, 0, 0, 0, 146.23952953972466, 263.5773131360133, 0, 0, 221.0701246211256, 0, 0, 0, 305.00491799313664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187.13097017864254, 314.6966793596653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143.42245291445826, 0, 0, 0.0, 0, 153.3101431738944, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140.80127840328723, 0, 0, 0, 0, 0, 133.3641631023867, 0, 196.4001018329675, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0], [0, 0, 0, 0, 146.102703602637, 0, 0, 0, 0, 0, 223.0807028857494, 0, 0, 0, 0, 0, 0, 0, 0, 278.4690287985362, 0, 317.9701243827791, 0, 0, 0, 0, 153.3101431738944, 0, 0.0, 0], [0, 0, 0, 129.9576854210631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241.3503677229434, 0, 0, 0, 0, 0, 0, 0, 143.8923208513922, 0, 0, 0, 0, 0.0]]
  381.  
  382. trafictipe=[[12, 6], [19, 22], [18, 9], [16, 2], [4, 27], [13, 5], [19, 8], [10, 28], [13, 17], [25, 4], [26, 28], [16, 11], [13, 23], [27, 8], [6, 7], [13, 22], [17, 23], [23, 25], [3, 19], [19, 16], [18, 4], [10, 11], [11, 19], [5, 18], [22, 13], [18, 22], [16, 24], [0, 16], [10, 21], [14, 6], [28, 1], [19, 12], [13, 14], [17, 12], [20, 3], [27, 22], [24, 27], [13, 26], [0, 5], [25, 14], [13, 26], [7, 10], [9, 27], [22, 21], [29, 27], [2, 7], [6, 7], [28, 4], [28, 5], [13, 4], [9, 18], [25, 5], [17, 9], [1, 13], [3, 17], [27, 25], [6, 23], [19, 20], [19, 25], [1, 11], [3, 0], [17, 20], [21, 11], [2, 7], [26, 18], [25, 12], [14, 11], [1, 13], [22, 11], [0, 10], [3, 7], [18, 15], [22, 7], [15, 26], [16, 25], [17, 29], [21, 16], [12, 17], [8, 11], [26, 17], [1, 29], [9, 12], [18, 0], [4, 15], [21, 10], [21, 2], [2, 23], [2, 13], [0, 24], [21, 13], [5, 17], [16, 6], [6, 7], [3, 23], [18, 21], [19, 4], [5, 9], [4, 24], [16, 11], [10, 19]]
  383.  
  384.  
  385.  
  386. resultattipe=[[[12, 19], [11, 19], [6, 11]], [[18, 19], [18, 24], [22, 24]], [[18, 24], [9, 24]], [[16, 29], [24, 29], [20, 24], [15, 20], [2, 15]], [[4, 28], [10, 28], [10, 27]], [[13, 17], [12, 17], [12, 19], [18, 19], [18, 24], [5, 24]], [[11, 19], [11, 25], [8, 25]], [[10, 28]], [[13, 17]], [[11, 25], [11, 19], [19, 28], [4, 28]], [[26, 28]], [[16, 27], [18, 27], [6, 18], [6, 11]], [[13, 23]], [[18, 27], [18, 24], [20, 24], [8, 20]], [[6, 11], [7, 11]], [[13, 17], [7, 17], [7, 25], [8, 25], [8, 20], [20, 22]], [[17, 23]], [[17, 23], [7, 17], [7, 25]], [[3, 18], [18, 19]], [[18, 19], [18, 27], [16, 27]], [[18, 19], [19, 28], [4, 28]], [[10, 27], [18, 27], [6, 18], [6, 11]], [[11, 19]], [[5, 24], [18, 24]], [[20, 22], [8, 20], [8, 25], [7, 25], [7, 17], [13, 17]], [[18, 24], [22, 24]], [[16, 29], [24, 29]], [[0, 23], [23, 26], [26, 28], [10, 28], [10, 27], [16, 27]], [[10, 28], [21, 28]], [[14, 17], [7, 17], [7, 11], [6, 11]], [[4, 28], [1, 4]], [[12, 19]], [[13, 17], [14, 17]], [[12, 17]], [[20, 24], [24, 29], [3, 29]], [[18, 27], [18, 24], [22, 24]], [[18, 24], [18, 27]], [[13, 26]], [[0, 23], [23, 26], [12, 26], [12, 19], [18, 19], [18, 24], [5, 24]], [[7, 25], [7, 17], [14, 17]], [[13, 26]], [[7, 11], [6, 11], [6, 18], [18, 27], [10, 27]], [[9, 24], [18, 24], [18, 27]], [[22, 24], [18, 24], [18, 19], [19, 28], [21, 28]], [[16, 29], [16, 27]], [[2, 25], [7, 25]], [[6, 11], [7, 11]], [[4, 28]], [[19, 28], [18, 19], [18, 24], [5, 24]], [[13, 26], [26, 28], [4, 28]], [[9, 24], [18, 24]], [[8, 25], [8, 20], [20, 22], [5, 22]], [[12, 17], [12, 19], [18, 19], [18, 24], [9, 24]], [[1, 4], [4, 28], [26, 28], [13, 26]], [[3, 18], [18, 19], [12, 19], [12, 17]], [[18, 27], [6, 18], [6, 11], [11, 25]], [[6, 11], [7, 11], [7, 17], [17, 23]], [[11, 19], [11, 25], [8, 25], [8, 20]], [[11, 19], [11, 25]], [[1, 4], [4, 28], [19, 28], [11, 19]], [[3, 18], [18, 19], [12, 19], [12, 26], [23, 26], [0, 23]], [[7, 17], [7, 25], [8, 25], [8, 20]], [[21, 28], [19, 28], [11, 19]], [[2, 25], [7, 25]], [[12, 26], [12, 19], [18, 19]], [[7, 25], [7, 17], [12, 17]], [[14, 17], [7, 17], [7, 11]], [[1, 4], [4, 28], [26, 28], [13, 26]], [[20, 22], [8, 20], [8, 25], [11, 25]], [[0, 23], [23, 26], [26, 28], [10, 28]], [[3, 18], [6, 18], [6, 11], [7, 11]], [[6, 18], [6, 11], [11, 25], [15, 25]], [[20, 22], [8, 20], [8, 25], [7, 25]], [[15, 25], [7, 25], [7, 17], [17, 23], [23, 26]], [[16, 27], [18, 27], [6, 18], [6, 11], [11, 25]], [[12, 17], [12, 19], [18, 19], [3, 18], [3, 29]], [[21, 28], [10, 28], [10, 27], [16, 27]], [[12, 17]], [[8, 25], [11, 25]], [[23, 26], [17, 23]], [[1, 4], [4, 28], [10, 28], [10, 27], [16, 27], [16, 29]], [[9, 24], [24, 29], [3, 29], [3, 18], [18, 19], [12, 19]], [[6, 18], [6, 11], [7, 11], [7, 17], [13, 17], [0, 13]], [[4, 28], [19, 28], [11, 19], [11, 25], [15, 25]], [[21, 28], [10, 28]], [[21, 28], [19, 28], [11, 19], [11, 25], [2, 25]], [[2, 25], [7, 25], [7, 17], [17, 23]], [[2, 25], [7, 25], [7, 17], [13, 17]], [[0, 13], [13, 17], [7, 17], [7, 25], [8, 25], [8, 20], [20, 24]], [[21, 28], [26, 28], [13, 26]], [[5, 24], [24, 29], [3, 29], [3, 18], [6, 18], [6, 11], [11, 19], [12, 19], [12, 17]], [[16, 27], [18, 27], [6, 18]], [[6, 18], [18, 27], [10, 27], [10, 28], [19, 28], [11, 19], [7, 11]], [[3, 18], [18, 27], [10, 27], [10, 28], [26, 28], [23, 26]], [[18, 27], [10, 27], [10, 28], [21, 28]], [[19, 28], [4, 28]], [[5, 22], [9, 22]], [[4, 28], [10, 28], [10, 27], [16, 27], [16, 29], [24, 29]], [[16, 27], [10, 27], [10, 28], [19, 28], [11, 19]], [[10, 28], [19, 28]]]
RAW Paste Data