Witam mam program który pobiera liczby z pliku i sprawdza czy sudoku jest dobrze ułożone
Znalazłem taki kod :
#include <fstream>
#include <iostream>
#include <string>
void reset(bool tab[][9]) {
for (int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++)
tab[i][j] = false;
}
int main() {
std::ifstream is;
is.open("sudoku.txt");
if (!is.good())
return 0;
std::string line;
bool columns[9][9], rows[9][9], squares[9][9];
reset(columns);
reset(rows);
reset(squares);
for (int i = 0; i < 9; i++) {
getline(is, line);
for (int j = 0; j < 9; j++) {
columns[j][line[j] - '0' - 1] = true;
rows[i][line[j] - '0' - 1] = true;
squares[(j - (j % 3)) / 3 + (i - (i % 3))][line[j] - '0' - 1] = true;
}
}
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++)
if (!columns[i][j] || !rows[i][j] || !squares[i][j]) {
std::cout << "false";
return 0;
}
}
std::cout << "true";
return 0;
}
Liczby są zapisane w pliku tekstowym np tak.Czyli 9x9 bez odestępów.
316156862
316156862
316156862
316156862
316156862
316156862
316156862
316156862
316156862
Głownie nie rozumiem tego:
for (int i = 0; i < 9; i++) {
getline(is, line);
for (int j = 0; j < 9; j++) {
columns[j][line[j] - '0' - 1] = true;
rows[i][line[j] - '0' - 1] = true;
squares[(j - (j % 3)) / 3 + (i - (i % 3))][line[j] - '0' - 1] = true;
}
}