Quindi ho un codice C++ per i nodi back-tracking in un algoritmo BFS. Sembra un po 'come questo:I loop infiniti sono in cattiva forma?
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;
}
}
Tuttavia, il while (true)
sembra ... sospetto a me. So che questo codice funziona e logicamente so che dovrebbe funzionare. Tuttavia, non riesco a scuotere la sensazione che ci dovrebbe essere qualche condizione nel while
, ma in realtà l'unico possibile è utilizzare una variabile bool
solo per dire se è fatto. Dovrei smettere di preoccuparmi? O è davvero una brutta forma.
EDIT: Grazie a tutti per aver notato che c'è un modo per aggirare questo. Tuttavia, mi piacerebbe comunque sapere se ci sono altri casi validi.
Questo è stato anche discusso un po' qui. http://stackoverflow.com/questions/885908/ – Copas
Non so. I loop infiniti sono in cattive condizioni? –