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...
![]()
思路:回溯解决,是不是好久没写了,开标记数组老是错
class Solution {
public:
bool check(vector<vector<char> > &board, int position) {
int x = position / 9;
int y = position % 9;
for (int i = 0; i < 9; i++)
if (i != x && board[i][y] == board[x][y])
return false;
for (int j = 0; j < 9; j++)
if (j != y && board[x][j] == board[x][y])
return false;
for (int i = x / 3 * 3; i < (x / 3 + 1) * 3; i++)
for (int j = y / 3 * 3; j < (y / 3 + 1) * 3; j++)
if (i != x && j != y && board[i][j] == board[x][y])
return false;
return true;
}
bool solve(vector<vector<char> > &board, int position) {
if (position == 81)
return true;
int row = position / 9;
int col = position % 9;
if (board[row][col] == '.') {
for (int i = 1; i <= 9; i++) {
board[row][col] = i + '0';
if (check(board, position) && solve(board, position+1))
return true;
board[row][col] = '.';
}
}
else {
if (solve(board, position + 1))
return true;
}
return false;
}
void solveSudoku(vector<vector<char> > &board) {
solve(board, 0);
}
};
原文:http://blog.csdn.net/u011345136/article/details/44017493