Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
bool isValidSudoku(vector<vector<char> > &board)
{
if(board.size() != 9 || board[0].size() != 9)
{
return false;
}
int rows = (int)board.size();
int columns = (int)board[0].size();
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < columns; j++)
{
if(board[i][j] == '.')
{
continue;
}
else
{
if(isValidSudokuCore(board, i, j))
{
continue;
}
else
{
return false;
}
}
}
}
return true;
}
bool isValidSudokuCore(vector<vector<char> > &board, int curX, int curY)
{
for(int i = 0; i < (int)board.size(); i++)
{
if(i != curX && board[i][curY] !='.' && board[i][curY] == board[curX][curY])
{
return false;
}
}
for(int i = 0; i < (int)board[0].size(); i++)
{
if(i != curY && board[curX][i] != '.' && board[curX][i] == board[curX][curY])
{
return false;
}
}
int rows = curX / 3;
int columns = curY / 3;
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
if((rows * 3 + i != curX || columns * 3 + j != curY) && board[rows * 3 + i][columns * 3 + j] != '.' && board[rows * 3 + i][columns * 3 + j] == board[curX][curY])
{
return false;
}
}
}
return true;
}