Rekurencja z powrotami - sudoku

0

Hej, napisałem sobie program, który w założeniu ma rozwiązywać dowolne sudoku 9x9, jednakże mam problem ze znalezieniem błędu w funkcji rekurencyjnej, która zajmowałaby się uzupełnianiem planszy. Jeśli ktoś byłby w stanie wskazać mi sposób w jaki to powinno być zrobione poprawnie, to byłbym bardzo wdzięczny.

-funkcja isConf sprawdza czy po wstawianiu wartości x w lokalizację (i,j) występuje konflikt
-A - plansza
-C - tablica wartości logicznych; true dla liczb znajdujących się pierwotnie w planszy A;

void solve(int i, int j, int key, int A[][size], bool C[][size]) {
     if (i > 8) {
           if (!C[i][j]) A[i][j] = key;
           if (key > 9) {
                   A[i][j] = 0;
                   return;
           }
           if (!isConf(i, j, key, A)) {
                                 if (j == 8) solve(i + 1, 0, 1, A, C);
                                 else solve(i, j + 1, 1, A, C);
           }
           else solve(i, j, key + 1, A, C);
     }
}
0

Nie rozumiem czemu warunek początkowy rekurencji to i > 8. To przecież znaczy że próbujesz wypełnić tylko ostatni wiersz/kolumnę tego sudoku...

0

Ajj no i z tego pośpiechu źle napisałem, oczywiście tam ma być i < 8 :) Ale nie w tym rzecz, bo tak mam w swoim kodzie i jest źle

0

Czy tak trudno w takim razie wstawić na forum FAKTYCZNY kod o który chodzi? Zaraz się okaże że znajdziemy kolejny błąd którego w normalnym kodzie nie ma...
Zresztą nie masz debuggera? o_O

0

do tego jest opcja szukaj na forum. Pamiętam, że był temat (nawet w tym dziale), w którym celem było policzenie ile jest rozwiązań dla jakiejś planszy (było ~1400). Oczywiście nie był to normalny problem Sudoku, gdzie powinno być dokładnie jedno rozwiązanie. Tam znajdziesz różne kody w różnych językach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1