Files
TermNSI/Graphes/Corrige_Exercices.md

213 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Corrigé des Exercices sur les Graphes
---
## Exercice 1 : Réseau social (README.md)
### Rappel du graphe
```
A --- B
/|\ |
/ | \ |
C | D--+
\ | /|
\|/ |
E--F
```
Avec :
- A ami avec B, C, D
- B ami avec A, D
- C ami avec A, E, D
- D ami avec A, B, C, E, F
- E ami avec C, D, F
- F ami avec E, D
### 1°) Degré des sommets
| Sommet | Voisins | Degré |
|--------|---------|-------|
| A | B, C, D | 3 |
| B | A, D | 2 |
| C | A, E, D | 3 |
| D | A, B, C, E, F | 5 |
| E | C, D, F | 3 |
| F | E, D | 2 |
**Vérification** : Somme des degrés = 3+2+3+5+3+2 = 18 = 2 × 9 arêtes ✓
### 2°) Ordre du graphe
L'ordre du graphe est **6** (il y a 6 sommets : A, B, C, D, E, F).
### 3°) Ce graphe est-il complet ?
**Non**, ce graphe n'est pas complet.
Dans un graphe complet d'ordre 6, chaque sommet serait de degré 5 (relié à tous les autres).
Contre-exemples :
- A n'est pas relié à E et F
- B n'est pas relié à C, E et F
---
## Exercice 2 : Matrice d'adjacence du réseau social
En numérotant les sommets dans l'ordre alphabétique (A, B, C, D, E, F) :
| | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| A | 0 | 1 | 1 | 1 | 0 | 0 |
| B | 1 | 0 | 0 | 1 | 0 | 0 |
| C | 1 | 0 | 0 | 1 | 1 | 0 |
| D | 1 | 1 | 1 | 0 | 1 | 1 |
| E | 0 | 0 | 1 | 1 | 0 | 1 |
| F | 0 | 0 | 0 | 1 | 1 | 0 |
**En Python :**
```python
M = [
[0, 1, 1, 1, 0, 0],
[1, 0, 0, 1, 0, 0],
[1, 0, 0, 1, 1, 0],
[1, 1, 1, 0, 1, 1],
[0, 0, 1, 1, 0, 1],
[0, 0, 0, 1, 1, 0]
]
```
**Remarque** : La matrice est symétrique car le graphe est non orienté.
---
## Exercice 3 : Réseau social d'Arthur (EXERCICES.md)
### Graphe
```
Arthur ---- Benoit ---- Coralie
| / |
| / |
Elodie ---- Franck ---- David
```
### Représentation par dictionnaire
```python
G = {
'Arthur': ['Benoit', 'Elodie'],
'Benoit': ['Arthur', 'Coralie'],
'Coralie': ['Benoit', 'Franck', 'David'],
'David': ['Coralie', 'Franck', 'Elodie'],
'Elodie': ['Arthur', 'David', 'Franck'],
'Franck': ['Coralie', 'David', 'Elodie']
}
```
### Matrice d'adjacence
En ordre alphabétique : Arthur, Benoit, Coralie, David, Elodie, Franck
| | Arthur | Benoit | Coralie | David | Elodie | Franck |
|---------|--------|--------|---------|-------|--------|--------|
| Arthur | 0 | 1 | 0 | 0 | 1 | 0 |
| Benoit | 1 | 0 | 1 | 0 | 0 | 0 |
| Coralie | 0 | 1 | 0 | 1 | 0 | 1 |
| David | 0 | 0 | 1 | 0 | 1 | 1 |
| Elodie | 1 | 0 | 0 | 1 | 0 | 1 |
| Franck | 0 | 0 | 1 | 1 | 1 | 0 |
---
## Exercice 4 : Village d'Eva (graphe orienté pondéré)
### Graphe
```
École
/ | \
3↓ 4↑ 6↕
/ | \
Boulangerie ←─── Mairie Salle des fêtes
↓ ↕2 ↕7 ↕5
4↓ Bureau Église Boucherie
↓ de poste
Boucherie
```
**Sommets** : Boulangerie, Bureau de poste, École, Boucherie, Église, Mairie, Salle des fêtes
**Arêtes orientées avec poids** :
- Boulangerie ↔ Bureau de poste : 2 min (double sens)
- École → Boulangerie : 3 min (sens unique)
- Boulangerie → Boucherie : 4 min (sens unique)
- École → Église : 3 min (sens unique)
- Mairie → École : 4 min (sens unique)
- École ↔ Salle des fêtes : 6 min (double sens)
- Boucherie ↔ Salle des fêtes : 5 min (double sens)
- Mairie ↔ Église : 7 min (double sens)
---
## Exercice 5 : Ordre et degrés (img2.PNG)
*(Réponse basée sur l'image du fichier)*
Pour déterminer l'ordre : compter le nombre de sommets.
Pour déterminer le degré de chaque sommet : compter le nombre d'arêtes incidentes.
**Méthode générale :**
```python
def ordre(graphe):
return len(graphe)
def degre(graphe, sommet):
return len(graphe[sommet])
def degres(graphe):
return {s: len(v) for s, v in graphe.items()}
```
---
## Exercice 6 : Dictionnaire et matrice (img3.PNG)
*(Réponse basée sur l'image du fichier)*
**Méthode pour créer le dictionnaire :**
```python
# Lire les sommets et leurs voisins depuis le graphe
G = {}
# Pour chaque sommet, lister ses voisins
# G['A'] = ['B', 'C', ...]
```
**Méthode pour créer la matrice d'adjacence :**
```python
def creer_matrice(graphe):
sommets = list(graphe.keys())
n = len(sommets)
matrice = [[0] * n for _ in range(n)]
for i, s1 in enumerate(sommets):
for j, s2 in enumerate(sommets):
if s2 in graphe[s1]:
matrice[i][j] = 1
return matrice
```
---
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.