Sudoku Solver: Spalte und Kolonne in ein Array packen
-
Hallo,
ich habe eine vierdimensionales-Array, was ein Sudoku-Grid darstellen soll. Nun weiß ich nicht zurecht, wie ich die Nte Spalte oder Kolonne in ein Array unterkriege. Mein nicht funktionierendes Beispiel sieht wie folgt aus:
std::array<char, 9> row(std::size_t n) const{ std::size_t index = 0; std::array<char, 9> col; for(std::size_t y=0; y!=3; ++y){ for(std::size_t x=0; x!=3; ++x){ for(std::size_t y2=0; y2!=3; ++y2){ for(std::size_t x2=0; x2!=3; ++x2){ if(x == n && x2 == n) col[index++] = fields[x][y][x2][y2]; } } } } return col; }Kann mir jemand einen Ratschlag geben, wie Zeile 9 auszusehen hat?
-
Ich verstehe nicht, wie du auf 4 Dimensionen kommst. Die Sudokus die ich so kenne haben 2 Dimensionen ... und ich verstehe nicht, was Dein Problem/Herausforderung ist.
-
jb schrieb:
Ich verstehe nicht, wie du auf 4 Dimensionen kommst. Die Sudokus die ich so kenne haben 2 Dimensionen ...
Man hat 3x3 Felder (
int[3][3]), und das 3x3.
-
Das schreit und verlangt nach Abstraktion. Wenn du jetzt solch einen 3- bzw. sogar 4-Sterne Code schreibst, dann blickst du da aller spätestens in 3 Wochen nicht mehr durch und darfst dann das ganze Programm jeweils nachvollziehen.
Teil das in Klassen und Objekte auf, dann ist auch recht schnell klar, was du an welcher Stelle machst.
Z.b. kannst du dein Sudoku Feld (also ein int[9][9]) in einer Klasse verstecken, und dadrüber kannst du dir Methoden schreiben, die Views auf eben solche Teilfelder zurückgeben (also deine 3x3 int[3][3] Quadrate).
-
Ok, ich habs mal mit int[9][9] gelöst bekommen.
Danke.
-
Skym0sh0 schrieb:
Z.b. kannst du dein Sudoku Feld (also ein int[9][9]) in einer Klasse verstecken, und dadrüber kannst du dir Methoden schreiben, die Views auf eben solche Teilfelder zurückgeben (also deine 3x3 int[3][3] Quadrate).
ja, dann blickt man auch noch Jahre später durch den eigenen Code durch. Siehe https://www.c-plusplus.net/forum/p2329120#2329120
Gruß
Werner