LeetCode Sudoku Solver

Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character '.'.

You may assume that there will be only one unique solution.


A sudoku puzzle...


...and its solution numbers marked in red.

class Solution {
    bool isValid(vector<vector<char> >& board, int x, int y)
	{
		bool flags[9] = {0};
		for(int i = 0; i < 9; ++i)
			if(board[x][i] >= '1' && board[x][i] <= '9')
			{
				if(!flags[board[x][i] - '1'])
					flags[board[x][i] - '1'] = true;
				else
					return false;
			}
		memset(flags, 0, 9);
		for(int i = 0; i < 9; ++i)
			if(board[i][y] >= '1' && board[i][y] <= '9')
			{
				if(!flags[board[i][y] - '1'])
					flags[board[i][y] - '1'] = true;
				else
					return false;
			}
		int xx = x/3*3;
		int yy = y/3*3;
		memset(flags, 0, 9);
		for(int i = 0; i < 3; ++i)
			for(int j = 0; j < 3; ++j)
				if(board[xx+i][yy+j] >= '1' && board[xx+i][yy+j] <= '9')
				{
					if(!flags[board[xx+i][yy+j]-'1'])
						flags[board[xx+i][yy+j]-'1'] = true;
					else
						return false;
				}
		return true;
	}
public:
    bool solveSudoku(vector<vector<char> > &board) {
		for(int i = 0; i < 9; ++i)
			for(int j = 0; j < 9; ++j)
			{
				if('.' == board[i][j])
				{
					for(int k = 1; k <= 9; ++k)
					{
						board[i][j] = '0' + k;
						if(isValid(board, i, j) && solveSudoku(board))
							return true;
						board[i][j] = '.';
					}
					return false;
				}
			}
		return true;
    }
};



你可能感兴趣的:(character,Numbers)