Module mvc.models.arc
Gestion des arcs
Expand source code
#!/usr/bin/python3
# -*- coding: utf8 -*-
# @author : Sébastien LOZANO
"""Gestion des arcs"""
# Pour la gestion des imports relatifs
import sys
import os
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(SCRIPT_DIR))
from models.noeud import Noeud # noqa: E402
class Arc:
"""La classe Arc sert pour chaque arête(edge) du graphe.
Attributs
---------
- nom : str - Identification d'un arc par un nom par souci de lisibilité de la représentation des objets de la classe Graphe.
- noeudDebut : Noeud - Une instance de la classe Noeud pour le début de l'arc.
- noeudFin : Noeud - Un instance de la classe Noeud pour la fin de l'arc.
- poids : int - Représente le montant de la créance ou le débit entre deux sommets.
- estInverse : bool - Un booléen pour savoir si l'arc est un arc inverse
""" # noqa: E501
def __init__(
self,
nom: str,
noeudDebut: Noeud,
noeudFin: Noeud,
poids=None,
estInverse=False
) -> None:
"""Constructeur
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc1 = Arc('n1n2', n1, n2, 12)
>>> print(arc1.nom)
n1n2
>>> print(arc1.noeudDebut)
Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
>>> print(arc1.noeudFin)
Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
>>> print(arc1.poids)
12
>>> print(arc1.estInverse)
False
>>> arc2 = Arc('n1n2Bis', n1, n2, 8, True)
>>> print(arc2.noeudDebut)
Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0)
>>> print(arc2.noeudFin)
Noeud(nom=n2, voisins=['n1'], nbArcs=2, capital=0)
>>> print(arc2.poids)
8
>>> print(arc2.estInverse)
True
"""
pass
assert isinstance(nom, str), "Le nom d'un arc doit être un string."
assert isinstance(poids, int) or poids is None, "Le poids d'un arc doit être un entier ou None." # noqa: E501
assert isinstance(noeudDebut, Noeud), "Le noeud de début de l'arc doit être une instance de Noeud." # noqa: E501
assert isinstance(noeudFin, Noeud), "Le noeud de fin de l'arc doit être une instance de Noeud." # noqa: E501
assert isinstance(estInverse, bool), "estInverse doit être un booléen"
self.nom = nom
self.noeudDebut = noeudDebut
self.noeudFin = noeudFin
self.poids = poids
self.estInverse = estInverse
# Les deux noeuds deviennent voisins s'ils ne le sont pas déjà
# sinon on incrémente uniquement le nombre d'arcs de chacun
if not noeudDebut.isVoisin(noeudFin):
noeudDebut.addVoisin(noeudFin)
else:
noeudDebut.setNbArcs(noeudDebut.getNbArcs() + 1)
noeudFin.setNbArcs(noeudFin.getNbArcs() + 1)
def __str__(self) -> None:
"""Représentation en chaine de caractères d'une instance de la classe Arc.
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc = Arc('n1n2', n1, n2, 12)
>>> print(arc)
Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=12, estInverse=False)
""" # noqa: E501
pass
return "Arc(nom={}, noeudDebut={}, noeudFin={}, poids={}, estInverse={})".format( # noqa: E501
self.nom,
self.noeudDebut,
self.noeudFin,
self.poids,
self.estInverse
)
# ================================================================
# =========== GETTERS ============================================
# ================================================================
def getNom(self) -> str:
"""Renvoie le nom de l'Arc.
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc = Arc('n1n2', n1, n2, 12)
>>> arc.getNom()
'n1n2'
"""
pass
return self.nom
def getPoids(self) -> int:
"""Renvoie le poids de l'Arc.
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc = Arc('n1n2', n1, n2, 12)
>>> arc.getPoids()
12
"""
pass
return self.poids
def getNoeudDebut(self) -> Noeud:
"""Renvoie le noeud de début de l'Arc.
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc = Arc('n1n2', n1, n2, 12)
>>> print(arc.getNoeudDebut())
Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
"""
pass
return self.noeudDebut
def getNoeudFin(self) -> Noeud:
"""Renvoie le noeud de fin de l'Arc.
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc = Arc('n1n2', n1, n2, 12)
>>> print(arc.getNoeudFin())
Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
"""
pass
return self.noeudFin
def getEstInverse(self) -> bool:
"""Renvoie un booléen selon que l'arc est un arc inverse ou non.
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc = Arc('n1n2', n1, n2, 12, False)
>>> print(arc.getEstInverse())
False
>>> arc1 = Arc('n1n2Bis', n1, n2, 12, True)
>>> print(arc1.getEstInverse())
True
"""
pass
return self.estInverse
# ================================================================
# =========== SETTERS ============================================
# ================================================================
def setNom(self, nouveauNom: str) -> None:
"""Redéfinit le nom de l'Arc.
Paramètres
----------
nouveauNom : str - Le nouveau nom de l'arc
Remarques
---------
À implémenter au besoin. Deux arcs ne doivent pas avoir le même nom !
Tests
-----
"""
pass
assert isinstance(nouveauNom, str), "Le nom d'un arc doit être un string." # noqa : E501
self.nom = nouveauNom
def setPoids(self, nouveauPoids: int) -> None:
"""Redéfinit le poids de l'Arc.
Paramètres
----------
nouveauPoids : int - Le nouveau poids de l'arc
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc = Arc('totn2', n1, n2, 12)
>>> arc.getPoids()
12
>>> arc.setPoids(8)
>>> arc.getPoids()
8
"""
pass
assert isinstance(nouveauPoids, int) or nouveauPoids is None, "Le poids d'un arc doit être un entier ou None." # noqa: E501
self.poids = nouveauPoids
def setNoeudDebut(self, nouveauNoeudDebut: Noeud) -> None:
"""Redéfinit le noeud de début de l'Arc.
Paramètres
----------
nouveauNoeudDebut : Noeud - Le nouveau noeud de debut de l'arc
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> n3 = Noeud('n3')
>>> arc1 = Arc('n1n2', n1, n2, 1)
>>> print(arc1)
Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False)
>>> arc1.setNoeudDebut(n3)
>>> print(arc1)
Arc(nom=n1n2, noeudDebut=Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0), poids=1, estInverse=False)
>>> print(n1)
Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
>>> arc2 = Arc('n3n2', n3, n2, 2)
>>> arc3 = Arc('n2n3', n2, n3, 3)
>>> arc4 = Arc('n2n1', n2, n1, 4)
>>> print(arc2)
Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0), poids=2, estInverse=False)
>>> print(n1)
Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=['n2'], nbArcs=3, capital=0)
>>> arc2.setNoeudDebut(n1)
>>> print(arc2)
Arc(nom=n3n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0), poids=2, estInverse=False)
>>> print(n1)
Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=['n2'], nbArcs=2, capital=0)
""" # noqa: E501
pass
assert isinstance(nouveauNoeudDebut, Noeud), "Le nouveau noeud de début d'un arc doit être une instance de la classe Noeud." # noqa: E501
# Si nouveauNoeudDebut est déjà voisin de self.noeudFin,
# On incrémente uniquement le nombre d'arcs de nouveauNoeudDebut
# Sinon on l'ajoute au voisinage
if self.noeudFin.isVoisin(nouveauNoeudDebut):
nouveauNoeudDebut.setNbArcs(nouveauNoeudDebut.getNbArcs() + 1)
else:
self.noeudFin.addVoisin(nouveauNoeudDebut)
# Si nombre d'arcs de self.noeudDebut vaut 1, il n'aura plus de voisin
# On peut le supprimer du voisinage de noeudFin
# car c'est forcément son seul voisin.
# Sinon on décrémente le nombre d'arcs de self.noeudDebut
# ============ Remarque
# On ne peut pas savoir s'il reste voisin de noeudFin ou pas,
# on le gère dans la classe Graphe car ici, on ne peut pas compter
# le nombre d'arcs parallèles entre deux noeuds.
# ============
if self.noeudDebut.getNbArcs() == 1:
self.noeudFin.removeVoisin(self.noeudDebut)
else:
self.noeudDebut.setNbArcs(self.noeudDebut.getNbArcs() - 1)
# On remplace alors le noeud de début de l'arc
self.noeudDebut = nouveauNoeudDebut
def setNoeudFin(self, nouveauNoeudFin: Noeud) -> None:
"""Redéfinit le noeud de fin de l'Arc.
Paramètres
----------
nouveauNoeudFin : Noeud - Le nouveau noeud de fin de l'arc
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> n3 = Noeud('n3')
>>> arc1 = Arc('n1n2', n1, n2, 1)
>>> print(arc1)
Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False)
>>> arc1.setNoeudFin(n3)
>>> print(arc1)
Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n3'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False)
>>> print(n1)
Noeud(nom=n1, voisins=['n3'], nbArcs=1, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
>>> arc2 = Arc('n3n2', n3, n2, 2)
>>> arc3 = Arc('n2n3', n2, n3, 3)
>>> arc4 = Arc('n2n1', n2, n1, 4)
>>> print(arc2)
Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=3, capital=0), poids=2, estInverse=False)
>>> print(n1)
Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=2, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=3, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0)
>>> arc2.setNoeudFin(n1)
>>> print(arc2)
Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=3, capital=0), poids=2, estInverse=False)
>>> print(n1)
Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=3, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=2, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0)
""" # noqa: E501
pass
assert isinstance(nouveauNoeudFin, Noeud), "Le nouveau noeud de fin d'un arc doit être une instance de la classe Noeud." # noqa: E501
# Si nouveauNoeudFin est déjà voisin de self.noeudDebut,
# on incrémente uniquement le nombre d'arcs de nouveauNoeudFin
# Sinon on l'ajoute au voisinage
if self.noeudDebut.isVoisin(nouveauNoeudFin):
nouveauNoeudFin.setNbArcs(nouveauNoeudFin.getNbArcs() + 1)
else:
self.noeudDebut.addVoisin(nouveauNoeudFin)
# Si nombre d'arcs de self.noeudFin vaut 1, il n'aura plus de voisin
# On peut le supprimer du voisinage de noeudDebut
# car c'est forcément son seul voisin.
# Sinon on décrémente le nombre d'arcs de self.noeudFin
# ============ Remarque
# On ne peut pas savoir s'il reste voisin de noeudDebut ou pas,
# on le gèrer dans la classe Graphe car ici, on ne peut pas compter
# le nombre d'arcs parallèles entre deux noeuds.
# ============
if self.noeudFin.getNbArcs() == 1:
self.noeudDebut.removeVoisin(self.noeudFin)
else:
self.noeudFin.setNbArcs(self.noeudFin.getNbArcs() - 1)
# On remplace alors le noeud de fin de l'arc
self.noeudFin = nouveauNoeudFin
def setEstInverse(self, nouveauEstInverse: bool) -> None:
"""Redéfinit le booléen qui permet de marquer un arc inverse.
Paramètres
----------
nouveauEstInverse : bool - nouveau booléen permettant de définir si un arc est un arc inverse.
Tests
-----
>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> arc = Arc('n1n2', n1, n2, 12, False)
>>> print(arc.getEstInverse())
False
>>> arc.setEstInverse(True)
>>> print(arc.getEstInverse())
True
""" # noqa : E501
pass
assert isinstance(nouveauEstInverse, bool), "nouveauEstInverse doit être un booléen" # noqa : E501
self.estInverse = nouveauEstInverse
# ================================================================
# =========== OUTILS =============================================
# ================================================================
if __name__ == "__main__":
import doctest
doctest.testmod()
Classes
class Arc (nom: str, noeudDebut: models.noeud.Noeud, noeudFin: models.noeud.Noeud, poids=None, estInverse=False)
-
La classe Arc sert pour chaque arête(edge) du graphe.
Attributs
-
nom : str - Identification d'un arc par un nom par souci de lisibilité de la représentation des objets de la classe Graphe.
-
noeudDebut : Noeud - Une instance de la classe Noeud pour le début de l'arc.
-
noeudFin : Noeud - Un instance de la classe Noeud pour la fin de l'arc.
-
poids : int - Représente le montant de la créance ou le débit entre deux sommets.
-
estInverse : bool - Un booléen pour savoir si l'arc est un arc inverse
Constructeur
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc1 = Arc('n1n2', n1, n2, 12) >>> print(arc1.nom) n1n2 >>> print(arc1.noeudDebut) Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0) >>> print(arc1.noeudFin) Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0) >>> print(arc1.poids) 12 >>> print(arc1.estInverse) False >>> arc2 = Arc('n1n2Bis', n1, n2, 8, True) >>> print(arc2.noeudDebut) Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0) >>> print(arc2.noeudFin) Noeud(nom=n2, voisins=['n1'], nbArcs=2, capital=0) >>> print(arc2.poids) 8 >>> print(arc2.estInverse) True
Expand source code
class Arc: """La classe Arc sert pour chaque arête(edge) du graphe. Attributs --------- - nom : str - Identification d'un arc par un nom par souci de lisibilité de la représentation des objets de la classe Graphe. - noeudDebut : Noeud - Une instance de la classe Noeud pour le début de l'arc. - noeudFin : Noeud - Un instance de la classe Noeud pour la fin de l'arc. - poids : int - Représente le montant de la créance ou le débit entre deux sommets. - estInverse : bool - Un booléen pour savoir si l'arc est un arc inverse """ # noqa: E501 def __init__( self, nom: str, noeudDebut: Noeud, noeudFin: Noeud, poids=None, estInverse=False ) -> None: """Constructeur Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc1 = Arc('n1n2', n1, n2, 12) >>> print(arc1.nom) n1n2 >>> print(arc1.noeudDebut) Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0) >>> print(arc1.noeudFin) Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0) >>> print(arc1.poids) 12 >>> print(arc1.estInverse) False >>> arc2 = Arc('n1n2Bis', n1, n2, 8, True) >>> print(arc2.noeudDebut) Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0) >>> print(arc2.noeudFin) Noeud(nom=n2, voisins=['n1'], nbArcs=2, capital=0) >>> print(arc2.poids) 8 >>> print(arc2.estInverse) True """ pass assert isinstance(nom, str), "Le nom d'un arc doit être un string." assert isinstance(poids, int) or poids is None, "Le poids d'un arc doit être un entier ou None." # noqa: E501 assert isinstance(noeudDebut, Noeud), "Le noeud de début de l'arc doit être une instance de Noeud." # noqa: E501 assert isinstance(noeudFin, Noeud), "Le noeud de fin de l'arc doit être une instance de Noeud." # noqa: E501 assert isinstance(estInverse, bool), "estInverse doit être un booléen" self.nom = nom self.noeudDebut = noeudDebut self.noeudFin = noeudFin self.poids = poids self.estInverse = estInverse # Les deux noeuds deviennent voisins s'ils ne le sont pas déjà # sinon on incrémente uniquement le nombre d'arcs de chacun if not noeudDebut.isVoisin(noeudFin): noeudDebut.addVoisin(noeudFin) else: noeudDebut.setNbArcs(noeudDebut.getNbArcs() + 1) noeudFin.setNbArcs(noeudFin.getNbArcs() + 1) def __str__(self) -> None: """Représentation en chaine de caractères d'une instance de la classe Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> print(arc) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=12, estInverse=False) """ # noqa: E501 pass return "Arc(nom={}, noeudDebut={}, noeudFin={}, poids={}, estInverse={})".format( # noqa: E501 self.nom, self.noeudDebut, self.noeudFin, self.poids, self.estInverse ) # ================================================================ # =========== GETTERS ============================================ # ================================================================ def getNom(self) -> str: """Renvoie le nom de l'Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> arc.getNom() 'n1n2' """ pass return self.nom def getPoids(self) -> int: """Renvoie le poids de l'Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> arc.getPoids() 12 """ pass return self.poids def getNoeudDebut(self) -> Noeud: """Renvoie le noeud de début de l'Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> print(arc.getNoeudDebut()) Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0) """ pass return self.noeudDebut def getNoeudFin(self) -> Noeud: """Renvoie le noeud de fin de l'Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> print(arc.getNoeudFin()) Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0) """ pass return self.noeudFin def getEstInverse(self) -> bool: """Renvoie un booléen selon que l'arc est un arc inverse ou non. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12, False) >>> print(arc.getEstInverse()) False >>> arc1 = Arc('n1n2Bis', n1, n2, 12, True) >>> print(arc1.getEstInverse()) True """ pass return self.estInverse # ================================================================ # =========== SETTERS ============================================ # ================================================================ def setNom(self, nouveauNom: str) -> None: """Redéfinit le nom de l'Arc. Paramètres ---------- nouveauNom : str - Le nouveau nom de l'arc Remarques --------- À implémenter au besoin. Deux arcs ne doivent pas avoir le même nom ! Tests ----- """ pass assert isinstance(nouveauNom, str), "Le nom d'un arc doit être un string." # noqa : E501 self.nom = nouveauNom def setPoids(self, nouveauPoids: int) -> None: """Redéfinit le poids de l'Arc. Paramètres ---------- nouveauPoids : int - Le nouveau poids de l'arc Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('totn2', n1, n2, 12) >>> arc.getPoids() 12 >>> arc.setPoids(8) >>> arc.getPoids() 8 """ pass assert isinstance(nouveauPoids, int) or nouveauPoids is None, "Le poids d'un arc doit être un entier ou None." # noqa: E501 self.poids = nouveauPoids def setNoeudDebut(self, nouveauNoeudDebut: Noeud) -> None: """Redéfinit le noeud de début de l'Arc. Paramètres ---------- nouveauNoeudDebut : Noeud - Le nouveau noeud de debut de l'arc Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> n3 = Noeud('n3') >>> arc1 = Arc('n1n2', n1, n2, 1) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> arc1.setNoeudDebut(n3) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=[], nbArcs=0, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0) >>> arc2 = Arc('n3n2', n3, n2, 2) >>> arc3 = Arc('n2n3', n2, n3, 3) >>> arc4 = Arc('n2n1', n2, n1, 4) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=3, capital=0) >>> arc2.setNoeudDebut(n1) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=2, capital=0) """ # noqa: E501 pass assert isinstance(nouveauNoeudDebut, Noeud), "Le nouveau noeud de début d'un arc doit être une instance de la classe Noeud." # noqa: E501 # Si nouveauNoeudDebut est déjà voisin de self.noeudFin, # On incrémente uniquement le nombre d'arcs de nouveauNoeudDebut # Sinon on l'ajoute au voisinage if self.noeudFin.isVoisin(nouveauNoeudDebut): nouveauNoeudDebut.setNbArcs(nouveauNoeudDebut.getNbArcs() + 1) else: self.noeudFin.addVoisin(nouveauNoeudDebut) # Si nombre d'arcs de self.noeudDebut vaut 1, il n'aura plus de voisin # On peut le supprimer du voisinage de noeudFin # car c'est forcément son seul voisin. # Sinon on décrémente le nombre d'arcs de self.noeudDebut # ============ Remarque # On ne peut pas savoir s'il reste voisin de noeudFin ou pas, # on le gère dans la classe Graphe car ici, on ne peut pas compter # le nombre d'arcs parallèles entre deux noeuds. # ============ if self.noeudDebut.getNbArcs() == 1: self.noeudFin.removeVoisin(self.noeudDebut) else: self.noeudDebut.setNbArcs(self.noeudDebut.getNbArcs() - 1) # On remplace alors le noeud de début de l'arc self.noeudDebut = nouveauNoeudDebut def setNoeudFin(self, nouveauNoeudFin: Noeud) -> None: """Redéfinit le noeud de fin de l'Arc. Paramètres ---------- nouveauNoeudFin : Noeud - Le nouveau noeud de fin de l'arc Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> n3 = Noeud('n3') >>> arc1 = Arc('n1n2', n1, n2, 1) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> arc1.setNoeudFin(n3) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n3'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3'], nbArcs=1, capital=0) >>> print(n2) Noeud(nom=n2, voisins=[], nbArcs=0, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0) >>> arc2 = Arc('n3n2', n3, n2, 2) >>> arc3 = Arc('n2n3', n2, n3, 3) >>> arc4 = Arc('n2n1', n2, n1, 4) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=3, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=2, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=3, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0) >>> arc2.setNoeudFin(n1) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=3, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=3, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=2, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0) """ # noqa: E501 pass assert isinstance(nouveauNoeudFin, Noeud), "Le nouveau noeud de fin d'un arc doit être une instance de la classe Noeud." # noqa: E501 # Si nouveauNoeudFin est déjà voisin de self.noeudDebut, # on incrémente uniquement le nombre d'arcs de nouveauNoeudFin # Sinon on l'ajoute au voisinage if self.noeudDebut.isVoisin(nouveauNoeudFin): nouveauNoeudFin.setNbArcs(nouveauNoeudFin.getNbArcs() + 1) else: self.noeudDebut.addVoisin(nouveauNoeudFin) # Si nombre d'arcs de self.noeudFin vaut 1, il n'aura plus de voisin # On peut le supprimer du voisinage de noeudDebut # car c'est forcément son seul voisin. # Sinon on décrémente le nombre d'arcs de self.noeudFin # ============ Remarque # On ne peut pas savoir s'il reste voisin de noeudDebut ou pas, # on le gèrer dans la classe Graphe car ici, on ne peut pas compter # le nombre d'arcs parallèles entre deux noeuds. # ============ if self.noeudFin.getNbArcs() == 1: self.noeudDebut.removeVoisin(self.noeudFin) else: self.noeudFin.setNbArcs(self.noeudFin.getNbArcs() - 1) # On remplace alors le noeud de fin de l'arc self.noeudFin = nouveauNoeudFin def setEstInverse(self, nouveauEstInverse: bool) -> None: """Redéfinit le booléen qui permet de marquer un arc inverse. Paramètres ---------- nouveauEstInverse : bool - nouveau booléen permettant de définir si un arc est un arc inverse. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12, False) >>> print(arc.getEstInverse()) False >>> arc.setEstInverse(True) >>> print(arc.getEstInverse()) True """ # noqa : E501 pass assert isinstance(nouveauEstInverse, bool), "nouveauEstInverse doit être un booléen" # noqa : E501 self.estInverse = nouveauEstInverse
Methods
def getEstInverse(self) ‑> bool
-
Renvoie un booléen selon que l'arc est un arc inverse ou non.
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12, False) >>> print(arc.getEstInverse()) False >>> arc1 = Arc('n1n2Bis', n1, n2, 12, True) >>> print(arc1.getEstInverse()) True
Expand source code
def getEstInverse(self) -> bool: """Renvoie un booléen selon que l'arc est un arc inverse ou non. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12, False) >>> print(arc.getEstInverse()) False >>> arc1 = Arc('n1n2Bis', n1, n2, 12, True) >>> print(arc1.getEstInverse()) True """ pass return self.estInverse
def getNoeudDebut(self) ‑> models.noeud.Noeud
-
Renvoie le noeud de début de l'Arc.
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> print(arc.getNoeudDebut()) Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
Expand source code
def getNoeudDebut(self) -> Noeud: """Renvoie le noeud de début de l'Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> print(arc.getNoeudDebut()) Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0) """ pass return self.noeudDebut
def getNoeudFin(self) ‑> models.noeud.Noeud
-
Renvoie le noeud de fin de l'Arc.
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> print(arc.getNoeudFin()) Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
Expand source code
def getNoeudFin(self) -> Noeud: """Renvoie le noeud de fin de l'Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> print(arc.getNoeudFin()) Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0) """ pass return self.noeudFin
def getNom(self) ‑> str
-
Renvoie le nom de l'Arc.
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> arc.getNom() 'n1n2'
Expand source code
def getNom(self) -> str: """Renvoie le nom de l'Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> arc.getNom() 'n1n2' """ pass return self.nom
def getPoids(self) ‑> int
-
Renvoie le poids de l'Arc.
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> arc.getPoids() 12
Expand source code
def getPoids(self) -> int: """Renvoie le poids de l'Arc. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12) >>> arc.getPoids() 12 """ pass return self.poids
def setEstInverse(self, nouveauEstInverse: bool) ‑> None
-
Redéfinit le booléen qui permet de marquer un arc inverse.
Paramètres
nouveauEstInverse : bool - nouveau booléen permettant de définir si un arc est un arc inverse.
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12, False) >>> print(arc.getEstInverse()) False >>> arc.setEstInverse(True) >>> print(arc.getEstInverse()) True
Expand source code
def setEstInverse(self, nouveauEstInverse: bool) -> None: """Redéfinit le booléen qui permet de marquer un arc inverse. Paramètres ---------- nouveauEstInverse : bool - nouveau booléen permettant de définir si un arc est un arc inverse. Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('n1n2', n1, n2, 12, False) >>> print(arc.getEstInverse()) False >>> arc.setEstInverse(True) >>> print(arc.getEstInverse()) True """ # noqa : E501 pass assert isinstance(nouveauEstInverse, bool), "nouveauEstInverse doit être un booléen" # noqa : E501 self.estInverse = nouveauEstInverse
def setNoeudDebut(self, nouveauNoeudDebut: models.noeud.Noeud) ‑> None
-
Redéfinit le noeud de début de l'Arc.
Paramètres
nouveauNoeudDebut : Noeud - Le nouveau noeud de debut de l'arc
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> n3 = Noeud('n3') >>> arc1 = Arc('n1n2', n1, n2, 1) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> arc1.setNoeudDebut(n3) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=[], nbArcs=0, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0) >>> arc2 = Arc('n3n2', n3, n2, 2) >>> arc3 = Arc('n2n3', n2, n3, 3) >>> arc4 = Arc('n2n1', n2, n1, 4) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=3, capital=0) >>> arc2.setNoeudDebut(n1) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=2, capital=0)
Expand source code
def setNoeudDebut(self, nouveauNoeudDebut: Noeud) -> None: """Redéfinit le noeud de début de l'Arc. Paramètres ---------- nouveauNoeudDebut : Noeud - Le nouveau noeud de debut de l'arc Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> n3 = Noeud('n3') >>> arc1 = Arc('n1n2', n1, n2, 1) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> arc1.setNoeudDebut(n3) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=[], nbArcs=0, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0) >>> arc2 = Arc('n3n2', n3, n2, 2) >>> arc3 = Arc('n2n3', n2, n3, 3) >>> arc4 = Arc('n2n1', n2, n1, 4) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=3, capital=0) >>> arc2.setNoeudDebut(n1) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n2'], nbArcs=2, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=4, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n2'], nbArcs=2, capital=0) """ # noqa: E501 pass assert isinstance(nouveauNoeudDebut, Noeud), "Le nouveau noeud de début d'un arc doit être une instance de la classe Noeud." # noqa: E501 # Si nouveauNoeudDebut est déjà voisin de self.noeudFin, # On incrémente uniquement le nombre d'arcs de nouveauNoeudDebut # Sinon on l'ajoute au voisinage if self.noeudFin.isVoisin(nouveauNoeudDebut): nouveauNoeudDebut.setNbArcs(nouveauNoeudDebut.getNbArcs() + 1) else: self.noeudFin.addVoisin(nouveauNoeudDebut) # Si nombre d'arcs de self.noeudDebut vaut 1, il n'aura plus de voisin # On peut le supprimer du voisinage de noeudFin # car c'est forcément son seul voisin. # Sinon on décrémente le nombre d'arcs de self.noeudDebut # ============ Remarque # On ne peut pas savoir s'il reste voisin de noeudFin ou pas, # on le gère dans la classe Graphe car ici, on ne peut pas compter # le nombre d'arcs parallèles entre deux noeuds. # ============ if self.noeudDebut.getNbArcs() == 1: self.noeudFin.removeVoisin(self.noeudDebut) else: self.noeudDebut.setNbArcs(self.noeudDebut.getNbArcs() - 1) # On remplace alors le noeud de début de l'arc self.noeudDebut = nouveauNoeudDebut
def setNoeudFin(self, nouveauNoeudFin: models.noeud.Noeud) ‑> None
-
Redéfinit le noeud de fin de l'Arc.
Paramètres
nouveauNoeudFin : Noeud - Le nouveau noeud de fin de l'arc
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> n3 = Noeud('n3') >>> arc1 = Arc('n1n2', n1, n2, 1) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> arc1.setNoeudFin(n3) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n3'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3'], nbArcs=1, capital=0) >>> print(n2) Noeud(nom=n2, voisins=[], nbArcs=0, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0) >>> arc2 = Arc('n3n2', n3, n2, 2) >>> arc3 = Arc('n2n3', n2, n3, 3) >>> arc4 = Arc('n2n1', n2, n1, 4) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=3, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=2, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=3, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0) >>> arc2.setNoeudFin(n1) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=3, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=3, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=2, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0)
Expand source code
def setNoeudFin(self, nouveauNoeudFin: Noeud) -> None: """Redéfinit le noeud de fin de l'Arc. Paramètres ---------- nouveauNoeudFin : Noeud - Le nouveau noeud de fin de l'arc Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> n3 = Noeud('n3') >>> arc1 = Arc('n1n2', n1, n2, 1) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> arc1.setNoeudFin(n3) >>> print(arc1) Arc(nom=n1n2, noeudDebut=Noeud(nom=n1, voisins=['n3'], nbArcs=1, capital=0), noeudFin=Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0), poids=1, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3'], nbArcs=1, capital=0) >>> print(n2) Noeud(nom=n2, voisins=[], nbArcs=0, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0) >>> arc2 = Arc('n3n2', n3, n2, 2) >>> arc3 = Arc('n2n3', n2, n3, 3) >>> arc4 = Arc('n2n1', n2, n1, 4) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=3, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=2, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=3, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0) >>> arc2.setNoeudFin(n1) >>> print(arc2) Arc(nom=n3n2, noeudDebut=Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0), noeudFin=Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=3, capital=0), poids=2, estInverse=False) >>> print(n1) Noeud(nom=n1, voisins=['n3', 'n2'], nbArcs=3, capital=0) >>> print(n2) Noeud(nom=n2, voisins=['n3', 'n1'], nbArcs=2, capital=0) >>> print(n3) Noeud(nom=n3, voisins=['n1', 'n2'], nbArcs=3, capital=0) """ # noqa: E501 pass assert isinstance(nouveauNoeudFin, Noeud), "Le nouveau noeud de fin d'un arc doit être une instance de la classe Noeud." # noqa: E501 # Si nouveauNoeudFin est déjà voisin de self.noeudDebut, # on incrémente uniquement le nombre d'arcs de nouveauNoeudFin # Sinon on l'ajoute au voisinage if self.noeudDebut.isVoisin(nouveauNoeudFin): nouveauNoeudFin.setNbArcs(nouveauNoeudFin.getNbArcs() + 1) else: self.noeudDebut.addVoisin(nouveauNoeudFin) # Si nombre d'arcs de self.noeudFin vaut 1, il n'aura plus de voisin # On peut le supprimer du voisinage de noeudDebut # car c'est forcément son seul voisin. # Sinon on décrémente le nombre d'arcs de self.noeudFin # ============ Remarque # On ne peut pas savoir s'il reste voisin de noeudDebut ou pas, # on le gèrer dans la classe Graphe car ici, on ne peut pas compter # le nombre d'arcs parallèles entre deux noeuds. # ============ if self.noeudFin.getNbArcs() == 1: self.noeudDebut.removeVoisin(self.noeudFin) else: self.noeudFin.setNbArcs(self.noeudFin.getNbArcs() - 1) # On remplace alors le noeud de fin de l'arc self.noeudFin = nouveauNoeudFin
def setNom(self, nouveauNom: str) ‑> None
-
Redéfinit le nom de l'Arc.
Paramètres
nouveauNom : str - Le nouveau nom de l'arc
Remarques
À implémenter au besoin. Deux arcs ne doivent pas avoir le même nom !
Tests
Expand source code
def setNom(self, nouveauNom: str) -> None: """Redéfinit le nom de l'Arc. Paramètres ---------- nouveauNom : str - Le nouveau nom de l'arc Remarques --------- À implémenter au besoin. Deux arcs ne doivent pas avoir le même nom ! Tests ----- """ pass assert isinstance(nouveauNom, str), "Le nom d'un arc doit être un string." # noqa : E501 self.nom = nouveauNom
def setPoids(self, nouveauPoids: int) ‑> None
-
Redéfinit le poids de l'Arc.
Paramètres
nouveauPoids : int - Le nouveau poids de l'arc
Tests
>>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('totn2', n1, n2, 12) >>> arc.getPoids() 12 >>> arc.setPoids(8) >>> arc.getPoids() 8
Expand source code
def setPoids(self, nouveauPoids: int) -> None: """Redéfinit le poids de l'Arc. Paramètres ---------- nouveauPoids : int - Le nouveau poids de l'arc Tests ----- >>> n1 = Noeud('n1') >>> n2 = Noeud('n2') >>> arc = Arc('totn2', n1, n2, 12) >>> arc.getPoids() 12 >>> arc.setPoids(8) >>> arc.getPoids() 8 """ pass assert isinstance(nouveauPoids, int) or nouveauPoids is None, "Le poids d'un arc doit être un entier ou None." # noqa: E501 self.poids = nouveauPoids
-