Bonjour !
Certains d'entre vous se souviennent un jour sans doute, dans votre jeunesse, ou alors en ce moment même
, avoir du faire vos premiers pas en C à la fac (voire plus tôt). Et un jour votre prof d'info chéri vous a demandé de lui rendre un bo projet totu bo et pas trop buggé avant al fin de l'année. Ben vala, aujourd'hui, c'est mon tour
Le projet que je réalise conjointement avec deux copains de la promotion (de licence info), c'est un programme de gestion de graphe, composé des éléments classiques que sont les sommets, les arêtes et les "jetons" (objets que l'on dépose dans les sommets et qui se déplacent de sommets en sommets via les arêtes donc). Et pour motiver un peu la foule, on a aussi pour mission de faire de ce programme un mini-RPG, en assimilant les sommets à des salles ou lieux, les arêtes à des chemins, et les jetons à des personnages. Avec en plus une gestion d'attributs pour chacune de ces structures, on peut parvenir à en faire un truc "sympa" (l'espace de 10 minutes, le temps que l'émerveillement d'avoir écrit un code qui bug pas passe
. On "peut" parvenir, parce que le projet n'est pas tout à fait achevé, à cause d'un petit problème, lié à une fonction du graphe.
Le prof nous a demandé d'implanter une fonction chargée d'identifier dans le graphe ses composantes fortement connexes (ou SCCs pour Strongly Connected Components), et d'utiliser pour cela l'algorithme de Tarjan, qu'il nous a donné. Du fait de sa "simplicité", son implémentation ne pose pas vraiment de problème, mais ce qui me pose problème, c'est qu'il ne semble pas correct.
En effet, dans certains cas, il fournit les bons indices de Tarjan qui permettent de constituer les SCCs ... et d'entre d'autres cas non. Comme ce n'est sans doute pas très clair, je vais poster dans le message suivant un exemple de graph dans lequel ça ne marche pas.
Les raisons ne sont sans doute pas nombreuses : ou alors mon implémentation n'est pas correcte (toujours possible), ou alors mon algo ne l'est pas ... et s'agissant d'un problème assez classique, j'espère qu'il en sera parmi vous qui pourront me corriger !
Merci d'avance.