213 lines
5.1 KiB
Markdown
213 lines
5.1 KiB
Markdown
|
|
# 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>.
|