# Explications Algorithmes
###### tags: `CR`
[TOC]
### Chaînes euleriennes (Amandine)
Passe par tout les Arcs du Graphe
*Renvoie* : Chaine affichée dans la console
Depuis le sommet de départ (0 ou celui sans prédécesseur) visite et marque tout les Arcs. Reviens en arrière si plus de chemin possible.
### Chaînes hamiltoniennes (Amandine)
Passe par tout les Sommets du Graphe
*Renvoie* : Chaine affichée dans la console
Depuis le sommet de départ (0 ou celui sans prédécesseur) visite et marque tout les Sommets. Reviens en arrière si plus de chemin possible.
### Arborescence et Anti-Arborescence (Amandine)
**Arborescence** : Sommet depuis lequel on peux accéder à tout les Sommets
*Renvoie* : Graphe formant l'arborescence (arbre)
**Anti-Arborescence** : Sommet depuis lequel on peux accéder à tout les Sommets en inversant les Arcs
*Renvoie* : Graphe formant l'anti-arborescence (arbre)
### Calcul des degrés d’un sommet (Amandine)
Calcul degré entrant + Calcul degré sortant
*Renvoie* : Degrés sur la console
### Calcul des plus courts chemins (Amandine)
**Floyd-Warshall** : Plus court chemin entre tout les Sommets du Graphe
*Renvoie* : paire de Matrices, Matrice de poids minimumpour aller d’un Sommet à un autre et la 2ème Matrice indique le prochain Sommet à atteindre pour effectuer le plus court chemin d’un Sommet.
- Matrice parent = prochain Sommet à atteindre (Matrice des successeurs pour chaque Sommet)
- Matrice de poids = Poids de chaque chemin. Initialisé à INFINI (pas de chemins), valeur des Arcs pour les chemins direct, et 0 (diagonales)
***
**Ford-Bellman** : Plus court chemin entre un sommet et tout les autres
Renvoie : Paire de vecteurs : les chemins pour aller du Sommet S vers les autres sommets du Graphe et la distance entre le Sommet S et les autres Sommets du Graphe.
Initialise les Sommet à INFINI et prédécesseur à -1. Vérifie qu'il n'y a pas de cycle négatif. Si il y a un Arc, calcul d'une nouvelle valeur inférieure et push dans une file.
### Recherche de la connexité (Amandine)
Vérifie si le graphe est connexe et donc pas de Sommet isolé. Tout les Sommets sont égalemment atteignavle par tout les autres Sommets.
*Renvoie* : Si le graphe n'est pas connexe
### Ordonnancement (PERT) (Amandine)
**Interface Graphique** : Fenêtre pour rentrer (id, étiquette,durée, taches antérieur)
-> valide + calcul postérité
**Calcul postérité** : Vérifie que toutes les tâches existent et pas de cycle
-> PERT
**PERT** : Lie chaque tâche avec un Arc vers sa/ses tâches antérieures et calcul date au plus tôt et date au plus tard
*Arc* = tache (durée, id)
*Sommet* = fin de la tâche, map = date + tôt, date + tard et tâche critique
- Date au + tôt = Durée de la tâche + date au plus tôt des sommets antérieurs
- Date au + tard = date + tard des Sommets postérieurs - la valeur de l'Arc entre les deux (Parcours en sens inverse des Arcs)
- Tâche critique = date au + tôt et au + tard égales donc pas de retards
***
* Pour un Arc avec plusieurs prédécesseurs : Choisis celui avec la date au + tards la plus faible.
* Si une tâche à plusieurs tâches comme prédécesseurs : Sélectionne celle avec la date au + tôt la plus élevée comme départ. Relie la tâche courante par un Arc fictif avec ses autres prédécesseurs.
* Présence d'un Sommet de Départ, Sommet de Fin et d'Arcs fictifs.
* Si pour une tâche pas de Successeurs : Arc fictif vers Fin.
* Fin : La date au + tôt la plus élevée est égale à la date au + tard.
************
### Coloration de graphe (Vincent)
entrée : Graphe
sortie: couleur du sommet(chaque case du vecteur contient la couleur du sommet)
Prend tous les sommets, et on les tries par ordre décroissant de degrées
Prend celui avec le plus grand degré -> Coloré avec premiere couleur
Vecteur comprenant l'id de tous nos sommets -> Sert de suivi pour la coloration
Tant que tous les sommet ne sont pas coloré -> Regarde les couleurs présente ainsi que le nombre sur les voisins du sommet non coloré
Choisi le sommet avec plus grand nombre de voisins colorées
Colorie le sommet avecc la plus petite couleur possible
### Détection de stables (Vincent)
entrée: Matrice
sortie: Stables du graphe
On appelle la fonction coloration d'abord
On trie les sommets en fonction de leur couleur
Dans chaque sous vecteur -> Liste d'id des sommets en fonction de leur couleur
### Détection de cliques (Vincent)
entrée: Matrice
sortie: cliques du graphe
Même fonction que pour les stables avec le graphe inverse
### Calcul des voisins d’un sommet (Vincent)
entrée: Matrice, Sommet
sortie: Liste des voisin du sommet
On fait un parcours de la matrice en récupérant la liste des voisins du sommet pris en entrée
### Résolution du problème du postier chinois (Vincent)
entrée : Matrice
sortie: Chaine eulérienne s'il existe (et bien une chaine, pas un cycle)
D'abord on effectue le calcul de Floyd Warshall pour obtenir la distance des plus courts chemins entre chaque pair de sommet de la matrice
On regarde la parité de tous les sommet du graphe
Cet fonction nous permet de trouver le plus court chemin passant par toutes les arêtes du graphe
### Résolution du problème de Little (Vincent)
entrée: Liste de Sommet, Matrice
sortie: Chemin le plus court entre ces sommets
Problème du voyageur de commerce : Trouver le plus petit chemin possible entre à partir d'une liste de sommet
On procède à une réduction de la matrice afin d'avoir des valeurs nulles sur chaque lignes et colonnes
On calcul le regret de chaque valeurs nulles (plus petite valeur de la ligne + colonne)
On prend le regret max trouvé, puis on créer un graphe binaire avec :
Sommet gauche : Valeur du sommet parent + réduction de la matrice + regret de l'arc choisi
Sommet droit = Valeur sommet parent + calcul de la nouvelle matrice sans l'arc choisi
- (A faire vérifier par Hugo et Guillaume quand algo fini)
### Gestion des flots (Vincent)
Algo Edmond Karp (parcours en largeur)
entrée : graphe ainsi que l'id du sommet puit et source
sortie: taille du flot du graphe
On procède à un parcours en largeur afin de trouver tous les flots partant de la source vers le puit tant qu'il trouve un chemin possible
Ensuite nous recherchons des chaines améliorantes
En procédant au même exercice avec la matrice résiduel
### Algo de Placement (Alexandre)
On compare les coordonnés de 2 sommets (2 boucles imbriqués) et on calcule une force de repulsion et d'attraction selon la distance qui les separe. la force d'attraction est calculé seulement quand les sommets on un arc qui les lies (ne fonctionne pas)
on fait ensuite le total de ces forces et on les applique au vecteur de direction du sommet a vers le sommet b.
On fait ça pour tout les sommet et on recommence jusqu'as ce qu'il n'y est plus de sommet qui se superpose