template void Graphe::Floyd(vector> CheminCourt, vector> PointChemin) const { map>>::iterator it1 = leGraphe.begin(); int sommet = 0; while (it1 != leGraphe.end()) { list>::iterator it2 = (*it1).second.begin(); int voisin = 0; while (it2 != (*it1).second.end()) { //si aucun chemin n'existe entre x,y alors 0 if ( sommet != (int)(*it2).first - 'A') ) { CheminCourt.at(sommet).at(voisin) = INFINI; PointChemin.at(sommet).at(voisin) = -1; } else { CheminCourt.at(sommet).at(voisin) = (*it2).second; PointChemin.at(sommet).at(voisin) = (int)(*it2).first - 'A'; } it2++; voisin++; } CheminCourt[sommet][sommet] = INFINI; // pas de chemin à soi-même it1++; sommet++; } for(int sommet = 0; sommet < n; sommet++) for(int voisin = 0; voisin < n; voisin++) for(int suivant = 0; suivant < n; suivant++) if(CheminCourt.at(voisin).at(sommet) + CheminCourt.at(sommet).at(suivant) < CheminCourt.at(voisin).at(suivant)) { // conserver chemin plus court CheminCourt.at(voisin).at(suivant) = CheminCourt.at(voisin).at(sommet) + CheminCourt.at(sommet).at(suivant); PointChemin.at(voisin).at(suivant) = sommet; }//if }// Floyd; #endif // CLASSE_GRAPHE