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;
    

    ?


Anmelden zum Antworten