Как установить значение из массива в объект ячейки для головоломки судоку - PullRequest
0 голосов
/ 01 августа 2020

Я создал список потенциальных кандидатов в головоломку судоку, который нужно поместить в недостающую ячейку. Если значение в моей головоломке судоку отсутствует, то есть ячейка содержит 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;
};
...