Я создал список потенциальных кандидатов в головоломку судоку, который нужно поместить в недостающую ячейку. Если значение в моей головоломке судоку отсутствует, то есть ячейка содержит 0
, как я могу установить новое значение на значение из моего списка кандидатов, если это единственное значение, оставшееся в списке кандидатов? В противном случае моя головоломка судоку должна повторяться до тех пор, пока она не сможет сжать список до только одного возможного значения, которое может go в ячейку, а затем присвоить значение, когда оно будет единственным оставшимся.
I необходимо продолжать это до тех пор, пока каждой ячейке не будет присвоено значение, и поэтому головоломка не будет решена.
SudokuPuzzle. cpp:
void SudokuPuzzle::solve(const char filenameIn[]) {
// Read puzzle from text file
readPuzzle(filenameIn);
// Get start time
const auto startTime = std::chrono::high_resolution_clock::now();
// Add code to solve the puzzle
for (int row = 0; row < 9; row++)
{
for (int col = 0; col < 9; col++)
{
for (int currentValue = 1; currentValue <= 9; currentValue++)
{
if (!exists_in_row(currentValue, row) &&
!exists_in_col(currentValue, col) &&
!exists_in_square(currentValue, row, col))
{
//insert candidate if it does not exist in triple context
m_grid[row][col].insertCandidate(currentValue);
}
}
}
}
//assign values from candidate list
Cell. cpp:
void Cell::setValue(int value)
{
m_value = value;
if (m_value == 0)
{
m_given = true;
}
}
//getter
bool Cell::getValue(int& n)
{
//if value is pre-defined set to current value
if (m_given)
{
n = m_value;
}
return m_given;
}
//updates candidate list
void Cell::insertCandidate(int n)
{
m_candidateList[m_candidate_counter++] = n;
}
int Cell::getCandidate(int value)
{
return m_candidateList[value];
}
Cell.h
class Cell
{
public:
Cell(void);
~Cell(void);
void setValue(int n);
bool getValue(int & n);
void insertCandidate(int n);
int getCandidate(int value);
private:
int m_candidateList[9];
int m_value;
bool m_given;
int m_candidate_counter = 0;
};