View difference between Paste ID: R6FAr1Z6 and zXSwNHHJ
SHOW: | | - or go back to the newest paste.
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)