Exercices
Exercice 1
Exercice 3 du sujet 0 version A - 2024
Correction Q1.
Correction Q2.
Le chemin le plus court est A-E-D (10 km).
Correction Q3.
La matrice d'adjacence de G1 est : \(\pmatrix{ 0 & 4 & 0 & 0 & 4 & 0 & 0 \\ 4 & 0 & 0 & 0 & 0 & 7 & 5 \\ 0 & 0 & 0 & 4 & 8 & 0 & 0 \\ 0 & 0 & 4 & 0 & 6 & 8 & 0 \\ 4 & 0 & 8 & 6 & 0 & 0 & 0 \\ 0 & 7 & 0 & 8 & 0 & 0 & 3 \\ 0 & 5 & 0 & 0 & 0 & 3 & 0 \\ }\)
Correction Q6.
La fonction cherche_itineraires
s'appelle elle-même, elle est donc récursive.
Correction Q7.
La fonction cherche_itineraires
sert à remplir la liste tab_itineraires
(initialement vide) avec tous les chemins (uniques) partant de start
et allant à end
.
Code pour tester la Q8.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
Correction Q8.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
Correction Q9.
Le problème vient de la variable globale tab_itineraires
.
- Après l'exécution de la commande
itineraires_court(G2, 'A', 'E')
,tab_itineraires
contient tous les chemins de A à E. - Si le programme n'est pas re-exécuté, l'enchainement avec la commande
itineraires_court(G2, 'A', 'F')
va venir rajouter à la listetab_itineraires
tous les chemins de A à F. - Lors de la recherche du trajet minimum, les trajets testés seront donc à la fois les trajets de A à F mais aussi de A à E : on peut donc potentiellement avoir une réponse erronnée.
Pour éviter cela, on pourrait faire ceci (non demandé) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Exercice 2
extrait de la BNS 2024
On considère dans cet exercice un graphe orienté représenté sous forme de listes d’adjacence.
On suppose que les sommets sont numérotés de 0
à n-1
.
Par exemple, le graphe suivant :
est représenté par la liste d’adjacence suivante :
adj = [[1, 2], [2], [0], [0]]
Écrire une fonction voisins_entrants(adj, x)
qui prend en paramètre le graphe
donné sous forme de liste d’adjacence et qui renvoie une liste contenant les voisins entrants
du sommet x
, c’est-à-dire les sommets y
tels qu’il existe une arête de y
vers x
.
Exemples :
>>> voisins_entrants([[1, 2], [2], [0], [0]], 0)
[2, 3]
>>> voisins_entrants([[1, 2], [2], [0], [0]], 1)
[0]
Correction
1 2 3 4 5 6 |
|
Exercice 3
Dans cet exercice, on considère un graphe non orienté représenté sous forme de listes d’adjacence. On suppose que les sommets sont numérotés de 0 à n-1.
Ainsi, le graphe suivant:
sera représenté par la liste d’adjacence suivante:
adj = [[1, 2], [0, 3], [0], [1], [5], [4]]
On souhaite déterminer les sommets accessibles depuis un sommet donné dans le graphe. Pour cela, on va procéder à un parcours en profondeur du graphe.
Compléter la fonction suivante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Exemples :
>>> accessibles([[1, 2], [0], [0, 3], [1], [5], [4]], 0)
[0, 1, 2, 3]
>>> accessibles([[1, 2], [0], [0, 3], [1], [5], [4]], 4)
[4, 5]
Correction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Exercice 4
Exercice 2 du sujet Concours GEIPI 2024.
Codes du sujet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
Pour vous aider à comprendre l'algorithme de Dijkstra, n'oubliez pas cette vidéo d'un youtuber célèbre.
Correction Q1.
1 2 3 4 5 6 7 8 9 10 |
|
Correction Q2.
1 2 3 4 5 6 7 8 |
|
Correction Q3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Correction Q4.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Exercice 5
Exercice 2 du sujet Amérique du Nord J1 2024
Correction Q1.
Correction Q2.
# G, J, Y, E, N, M, A, L
matrice_adj = [ [0, 1, 1, 0, 1, 1, 0, 0], #G
[1, 0, 1, 1, 0, 0, 0, 1], #J
[1, 1, 0, 1, 1, 1, 1, 0], #Y
[0, 1, 1, 0, 1, 0, 0, 0], #E
[1, 0, 1, 1, 0, 0, 0, 0], #N
[1, 0, 1, 0, 0, 0, 1, 0], #M
[0, 0, 1, 0, 0, 1, 0, 0], #A
[0, 1, 0, 0, 0, 0, 0, 0]] #L
Correction Q3.
position(sommets, 'G')
renvoie 0position(sommets, 'Z')
renvoieNone
Correction Q4.
1 2 3 4 5 6 7 8 |
|
Correction Q5.
nb_amis(sommets, matrice_adj, 'G')
renvoie 4.
Correction Q6.
c
représente la clé.v
représente la valeur associée à cette clé.
Correction Q7.
graphe = {
'G' : ['J', 'Y', 'N', 'M'],
'J': ['G', 'Y', 'E', 'L'],
'Y': ['G', 'J', 'E', 'N', 'M', 'A'],
'E': ['J', 'Y', 'N'],
'N': ['G', 'Y', 'E'],
'M': ['G', 'Y', 'A'],
'A': ['Y', 'M'],
'L': ['J']
}
Correction Q8.
def nb_amis(d, s):
return len(d[s])
Correction Q9.
Le cercle d'amis de Lou est J G Y E N
.
Erreur d'énoncé sur la question 10.
Le code à compléter est celui-ci :
1 2 3 4 5 6 7 |
|
Correction Q10.
1 2 3 4 5 6 7 |
|