leetcode113: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 {public: void solveSudoku(vector<vector<char>>& board) { vector<vector<int>> used1(9,vector<int>(9,0)),used2(9,vector<int>(9,0)),used3(9,vector<int>(9,0)); fillnum(used1,used2,used3,board); solve(used1,used2,used3,board); } void fillnum(vector<vector<int>> &used1,vector<vector<int>> &used2,vector<vector<int>> &used3,vector<vector<char> > &board) { for(int i=0;i<board.size();i++) for(int j=0;j<board[0].size();j++) if(board[i][j]!='.') { int num=board[i][j]-'0'-1; int k=i/3*3+j/3; used1[i][num]=used2[j][num]=used3[k][num]=1; } } bool solve(vector<vector<int>> &used1,vector<vector<int>> &used2,vector<vector<int>> &used3,vector<vector<char>>&board){ for(int i=0;i<board.size();i++) for(int j=0;j<board[0].size();j++){ int k=i/3*3+j/3; if(board[i][j]=='.'){ for(int fill=1;fill<10;fill++){ if(used1[i][fill-1]==0 && used2[j][fill-1]==0 && used3[k][fill-1]==0){ board[i][j]=fill+'0'; used1[i][fill-1]=used2[j][fill-1]=used3[k][fill-1]=1; if(solve(used1,used2,used3,board)) return true; board[i][j]='.'; used1[i][fill-1]=used2[j][fill-1]=used3[k][fill-1]=0; } } return false; } } return true; }};
浙公网安备 33010602011771号