exercices chapitre 10

TERMINALE NSI

exercice 10.1

Vous avez décidé de développer un réseau social à l’échelle du lycée. Afin d’effectuer des tests, vous décidez de limiter votre réseau à social à 6 utilisateurs que vous décidez de nommer : A, B, C, D, E et F. À un instant t, voici l’état de votre réseau social :

1) Vous décidez de représenter l’état de votre réseau social à l’instant t par un graphe non orienté G. Les personnes (A, B, C,…) seront les sommets du graphe G. Une relation « x et y sont amis » sera une arête de G. Représentez graphiquement le graphe G.

2) Représentez la matrice d’adjacence du graphe G (A est associé à l’indice 1 de la matrice, B à l’indice 2, C à l’indice 3, etc.)

3) Le parcours [A, B, C, D, E, F] est-il un parcours « en profondeur d’abord » ou un parcours « en largeur d’abord » ? Justifiez votre réponse

4) On donne ci-dessous l’algorithme permettant d’obtenir le parcours en « largeur d’abord » d’un graphe G. Complétez cet algorithme (si possible sans vous aider du cours)

VARIABLE
G : un graphe
s : noeud (origine)
u : noeud
v : noeud
f : file (initialement vide)

DEBUT
s.couleur ← noir
enfiler (s,f)
tant que f non vide :
  u ← ………….
  pour chaque sommet v adjacent au sommet ……… :
    si v.couleur n'est pas ……… :
      v.couleur ← noir
      enfiler(...,f)
    fin si
  fin pour
fin tant que
FIN

exercice 10.2

Soit la matrice d'adjacence suivante qui représente un graphe G :

1) Faites un schéma du graphe G

2) Implémentez le graphe G en Python à l’aide d’un dictionnaire et des listes (tableaux).

3) Soit le programme Python suivant :

g1 = {'A':['B','C'], 'B':['A'], 'C':['A','D'], 'D':['C']}

def myst(G,s):
    noir=[]
    p = []
    l = []
    noir.append(s)
    p.append(s)
    while len(p)>0:
        u = p.pop()
        l.append(u)
        for v in G[u]:
            if v not in noir:
                noir.append(v)
                p.append(v)
    return l

L = myst(g1,'A')

Que vaut L après l'exécution de ce programme

4) Complétez le programme Python suivant (la fonction cycle prend en paramètre un graphe G et retourne True si le graphe G possède un cycle et False dans le cas contraire), si possible sans vous aider du cours.

def cycle(G):
    s = random.choice(list(G.keys()))
    p = []
    p.append(s)
    noir=[]
    while len(p)>0:
        u = p.pop()
        for v in ………:
            if v not in noir:
                p.append(....)   
        if u in ……….:
            return True
        else :
            noir.append(u)
    return …………