LeetCode Sudoku Solver
2017-01-25 16:55
267 查看
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]
== 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);
}
};
思路二:
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]
== 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);
}
};
思路二:
相关文章推荐
- [leetcode]Sudoku Solver
- [LeetCode] Sudoku Solver
- Leetcode Sudoku Solver
- LeetCode Sudoku Solver
- LeetCode | Sudoku Solver
- leetcode 日经贴,Cpp code -Sudoku Solver
- [leetcode] 37. Sudoku Solver
- [LeetCode] Sudoku Solver(迭代)
- leetcode习题解答:37. Sudoku Solver
- [leetcode] Sudoku Solver
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
- LeetCode--Sudoku Solver(DFS)
- 【LeetCode】Sudoku Solver
- leetcode 037 —— Sudoku Solver
- LeetCode 37 Sudoku Solver
- [LeetCode]037-Sudoku Solver
- LEETCODE —— Sudoku Solver
- Leetcode: Sudoku Solver
- leetcode第一刷_Sudoku Solver
- LeetCode 36 Sudoku Solver