您的位置:首页 > 其它

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);
}
};


思路二:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode