Sudoku Solver

来源:互联网 发布:电信路由器限制端口 编辑:程序博客网 时间:2024/06/06 10:05

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 {public:bool process(vector<vector<char> > &board, vector<vector<int> > &flag){for (int i = 0; i < 9; ++i)for (int j = 0; j < 9; ++j)  { if ('.' == board[i][j]) {for (int k = 0; k < 9; ++k){int val = 1 << k;if (flag[0][i] & val || flag[1][j] & val || flag[2][(i/3)*3 + j/3] & val)continue;board[i][j] = k + '1';flag[0][i] |= val;flag[1][j] |= val;flag[2][(i/3)*3 + j/3] |= val;if (process(board, flag))return true;else{board[i][j] = '.';flag[0][i] ^= val;flag[1][j] ^= val;flag[2][(i/3)*3 + j/3] ^= val;}}return false; }   }return true;}    void solveSudoku(vector<vector<char> > &board) {   vector< vector<int> > flag(3, vector<int>(9, 0));for (int i = 0; i < 9; i++)for(int j = 0; j < 9; j++){if ('.' == board[i][j])continue;int val = 1 << (board[i][j] - '1');flag[0][i] |= val;flag[1][j] |= val;flag[2][(i/3)*3 + j/3] |= val;}process(board, flag);    }};





0 0
原创粉丝点击