您的位置:首页 > 其它

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; 

    }

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