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.
以前写过求解数独的东西,但是现在想想当初写的代码简直就是一坨shit
思路一:暴力搜索法
代码如下:
class Solution {
public:
bool isInRow(vector<vector<char>>& board,int i,char c)
{
vector<char> row = board[i];
for(int k=0;k<9;k++)
{
if(row[k] == c)
return true;
}
return false;
}
bool isInCol(vector<vector<char>>& board,int j,char c)
{
for(int k=0;k<9;k++)
{
if(board[k][j] == c)
return true;
}
return false;
}
bool isInRec(vector<vector<char>>& board,int i,int j,char c)
{
int bigRow=i/3,bigCol=j/3;
for(int m=bigRow*3;m<(bigRow+1)*3;m++)
{
for(int n=bigCol*3;n<(bigCol+1)*3;n++)
{
if(board[m][n] == c)
return true;
}
}
return false;
}
bool solve(vector<vector<char>>& board,int ind)
{
if(ind >= 81)
return true;
int i=ind/9;
int j=ind%9;
if(board[i][j] != '.')
return solve(board,ind+1);
else
{
for(char k='1';k<='9';k++)
{
if(!isInRow(board,i,k) && !isInCol(board,j,k) && !isInRec(board,i,j,k))
{
board[i][j]=k;
if(!solve(board,ind+1))
board[i][j] = '.';
else
return true;
}
}
return false;
}
}
void solveSudoku(vector<vector<char>>& board) {
solve(board,0);
}
};
思路二: