leetcode:Sudoku Solver
2014-03-18 21:45
295 查看
算法打死没想出来,看了看别人的代码,才发现是暴力枚举(递归)
首先找一个没有填的空,然后填入1-9,判断填入之后的数是否有冲突,没有就继续递归。
public class Solution {
public void solveSudoku(char[][] board) {
msolveSudoku(board);
}
public boolean msolveSudoku(char[][] board) {
int i=0,j=0,k=0;
boolean bflag=false;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(board[i][j]!='.')
continue;
if(board[i][j]=='.')
{ bflag=true;break;}
}
if(bflag)
break;
}
if(i>=9)
return true;
for(k=0;k<9;k++)
{
board[i][j]=(char)(k+'1');
if(isValidSudoku(board,i,j))
if(msolveSudoku(board)==true)
return true;
}
board[i][j]='.';
return false;
}
public boolean isValidSudoku(char[][] board,int a,int b) {
int i,j;
for(i = 0; i < 9; i++)
if(i != a && board[i][b] == board[a][b])
return false;
for(j = 0; j < 9; j++)
if(j != b && board[a][j] == board[a][b])
return false;
int x = a/3*3;
int y = b/3*3;
for(i = 0; i < 3; i++)
for(j = 0; j< 3; j++)
if(x+i != a && y+j != b && board[x+i][y+j] == board[a][b])
return false;
return true;
}
}
首先找一个没有填的空,然后填入1-9,判断填入之后的数是否有冲突,没有就继续递归。
public class Solution {
public void solveSudoku(char[][] board) {
msolveSudoku(board);
}
public boolean msolveSudoku(char[][] board) {
int i=0,j=0,k=0;
boolean bflag=false;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(board[i][j]!='.')
continue;
if(board[i][j]=='.')
{ bflag=true;break;}
}
if(bflag)
break;
}
if(i>=9)
return true;
for(k=0;k<9;k++)
{
board[i][j]=(char)(k+'1');
if(isValidSudoku(board,i,j))
if(msolveSudoku(board)==true)
return true;
}
board[i][j]='.';
return false;
}
public boolean isValidSudoku(char[][] board,int a,int b) {
int i,j;
for(i = 0; i < 9; i++)
if(i != a && board[i][b] == board[a][b])
return false;
for(j = 0; j < 9; j++)
if(j != b && board[a][j] == board[a][b])
return false;
int x = a/3*3;
int y = b/3*3;
for(i = 0; i < 3; i++)
for(j = 0; j< 3; j++)
if(x+i != a && y+j != b && board[x+i][y+j] == board[a][b])
return false;
return true;
}
}
相关文章推荐
- [leetcode-37]Sudoku Solver(java)
- [LeetCode][JavaScript]Sudoku Solver
- LeetCode 37. Sudoku Solver(数独Ⅱ)
- leetcode 37 Sudoku Solver
- [leetcode]Sudoku Solver
- [LeetCode]Sudoku Solver
- Leetcode 38 Sudoku Solver
- [LeetCode]Sudoku Solver
- 【LeetCode题意分析&解答】37. Sudoku Solver
- LeetCode 37. Sudoku Solver
- leetcode: Sudoku Solver
- [LeetCode]Sudoku Solver
- LeetCode-37. Sudoku Solver (JAVA)(数独游戏解集)
- leetcode---Sudoku Solver---深搜
- leetcode -- Sudoku Solver -- 经典重点
- LeetCode - Sudoku Solver
- leetcode第一刷_Sudoku Solver
- [leetcode]Sudoku Solver
- LeetCode - Sudoku Solver
- Leetcode224: Sudoku Solver