TP2 Python : Graphes P. Vanier, T. Kaced TP2 Python : Graphes [email protected] Exercice 1. Écrivez une classe Graphe qui aura : — Comme variable statique privée N , le nombre d’objets graphe qui existent actuellement (il faut prendre en compte ceux qui ont été détruits aussi) — Comme variables privées : — le nombre de sommets, — un dictionnaire qui contiendra dans l’indice correspondant à chaque sommet une liste des sommets qui lui sont adjacents. — Comme méthodes : — ajout_sommet(nom) pour ajouter un sommet — ajout_arete(s1,s2) pour ajouter une arête de i à j. — ajout_aretes(liste) pour ajouter une liste d’arêtes. — supprimer_sommet(s) — supprimer_sommets(liste) — supprimer_arete(s1,s2) — supprimer_sommets(liste) Exercice 2. Rendez cette classe itérable : l’itération doit renvoyer les sommets du graphe un à un. Exercice 3. Écrivez un générateur aretes(s) qui énumère les arêtes sortant du sommet s. 1 Graphe de pages web On veut maintenant construire le graphe des relations entre certaines pages web : pages = ["http://uncyclopedia.wikia.com/wiki/My_Yu-Gi-Oh!_collection", "http://uncyclopedia.wikia.com/wiki/Awesome", "http://uncyclopedia.wikia.com/wiki/Clothes", "http://uncyclopedia.wikia.com/wiki/World_War_2", "http://uncyclopedia.wikia.com/wiki/World_War_1", "http://uncyclopedia.wikia.com/wiki/Charles_de_Gaulle", "http://uncyclopedia.wikia.com/wiki/French", "http://uncyclopedia.wikia.com/wiki/Surrender", "http://uncyclopedia.wikia.com/wiki/Asterix", "http://uncyclopedia.wikia.com/wiki/French_Military" "http://uncyclopedia.wikia.com/wiki/Cheese" ] Une page sera représentée par un nœud et il y aura une arête du nœud correspondant à la page p1 au nœud correspondant à la page p2 si il existe un lien hypertexte dans p1 dont le champ href est l’adresse de p2 . Exercice 4. En utilisant requests et beautifulsoup4 , construisez un objet Graphe qui contient le graphe des pages web de la liste pages . M1 Python – Cours : P. Vanier 1/2 TP2 Python : Graphes P. Vanier, T. Kaced Exercice 5. À l’aide d’un algorithme de plus court chemin, trouvez le chemin le plus court (n’empruntant que des liens commençant par http://uncyclopedia.wikia.com) entre les pages suivantes : p1 = "http://uncyclopedia.wikia.com/wiki/Captain_Obvious" p2 = "http://uncyclopedia.wikia.com/wiki/HowTo:Fix_a_computer" M1 Python – Cours : P. Vanier 2/2