Backtracking beenden
-
Hallo an Alle, im Bereich Backtracking bin ich ziemlich neu und auch ganz froh das hier zum Laufen bekommen zu haben. Aktuell werden alle mögliche Lösungen abgespeichert. Was müsste ich ändern um es nach der ersten gefundenen Lösung zu beenden?
bool solve(std::vector<std::vector<int> > field, std::vector<std::vector<std::vector<int> > > &solutions){
position pos; // struct if (!findEmpty(field, pos)){ // pos als Referenz solutions.push_back(field); return true; } std::vector<int> options = findOptions(field, pos); if (options.empty()){ return false; } for (int i = 0; i < options.size(); i++){ std::vector<std::vector<int> > copyOfField = field; copyOfField[pos.y][pos.x] = options[i]; solve(copyOfField, solutions); }
}
Die letzte Zeile habe ich auch als if(solve(copyOfField, solutions)){break;} als auch mit ...{return true;} versucht. Wäre dankbar für jeden Ratschlag! Frohes Neues
-
Ich nehme an, dass Du eine Lösung gefunden hast, sobald einmal
solutions.push_back(field);
ausgeführt wurde?
Dann kannst Du doch einfach die Funktion beginnen mit:if(solutions.size() > 0) return true;
?