bestimme Elemente in Array in const umwandeln
-
ok schade, fällt dir irgendein anderer Weg, wie man es machen kann?
-
Welches Problem willst Du denn mit der Idee einzelne Array-Elemente
const
zu machen lösen?
-
@mute7 sagte in bestimme Elemente in Array in const umwandeln:
ok schade, fällt dir irgendein anderer Weg, wie man es machen kann?
Was soll es genau sein? Vermutlich soll doch das Programm zur Laufzeit prüfen, ob ein Wert vorgegeben (d.h. nicht änderbar ist). Das hat aber nichts mit dem C++ Konstrukt const zu tun.
-
Ich möchte Sudokus automatisch lösen lassen mit Backtracking von Reihe zu Reihe.
Da aber einige Zahlen schon in dem Sudoku selbst stehen, und die auch nicht mehr verändern werden, muss ich die von dem Backtracking ja irgendwie ausschließen.
-
@mute7 sagte in bestimme Elemente in Array in const umwandeln:
muss ich die von dem Backtracking ja irgendwie ausschließen.
Einfach die, wo ein Wert ungleich 0 drin steht?
-
@Belli Ja aber backtraking geht ja quasi immerweiter von links nach rechts und wieder zurück, auf dem Rückweg ständen da ja dann keine Nullen mehr drin.
-
- vorgegebene Zahlen als negative Zahlen eintragen
- ein zweites Array mit bool verwenden
- im Array bool und int statt nur int speichern
- unodered_set<pair<int,int>> mit den Koordinaten der vorgegebenen Zahlen
-
@mute7
Nö, wenn Du sagst, probiere alle Werte von 1 bis 9 aus, wenn eine 0 drinsteht, ansonsten überspringe dieses Feld, dann ist das ne ganz normale Schleife, die auf dem 'Rückweg' das auf dem 'Hinweg' übersprungene Feld auch nicht anpackt.
-
Wenn keine Lösung möglich ist, setzt man die Felder jeweils wieder zurück.
Vielleicht wird das hier etwas deutlicher (erste Spalte und erste Reihe sind gesetzt):
https://i.ibb.co/TMfJ021/Sudoku.webp
Es ist natürlich noch immer keine gute Lösung, aber keine Ahnung, wie momentan der Stand der Dinge ist.
-
Dazu braucht es keine anderen Datentypen:
if (sudoku[x, y] == 0) { sudoku[x, y] = new_value; do_backtracking(); sudoku[x, y] = 0; }