J'ai donc un code C++ pour le back-tracking des nœuds dans un algorithme BFS. Il ressemble un peu à ceci :
typedef std::map<int> MapType;
bool IsValuePresent(const MapType& myMap, int beginVal, int searchVal)
{
int current_val = beginVal;
while (true)
{
if (current_val == searchVal)
return true;
MapType::iterator it = myMap.find(current_val);
assert(current_val != myMap.end());
if (current_val == it->second) // end of the line
return false;
current_val = it->second;
}
}
Toutefois, le while (true)
me semble... suspect. Je sais que ce code fonctionne, et logiquement je sais qu'il devrait fonctionner. Cependant, je n'arrive pas à me débarrasser du sentiment qu'il devrait y avoir une condition dans l'élément while
mais la seule solution possible est d'utiliser un bool
variable juste pour dire si c'est fait. Dois-je cesser de m'inquiéter ? Ou est-ce que c'est vraiment une mauvaise forme.
EDITAR : Merci à tous ceux qui ont remarqué qu'il y avait un moyen de contourner ce problème. Cependant, j'aimerais savoir s'il existe d'autres cas valables.