标签:思路 ted 利用 one img 修改 ber false commons
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.
本题比较难,思路和Sudoku不太一样,因为这个题目要求的是解决这个问题,那么如何解决呢,我们可以利用把char插入到‘.’的位置后,是否为有效来进行判断,但是判断的方法和之前的那道题不一样,我们只要考虑同一行,同一列,同一个正方形里面是否有这个char就可以了。判断第i,j个位置发现符合要求后,把board[i][j]的位置进行修改,然后递归这个solve函数,如果solve是true的,那么就是valid的,否则不是valid,就把board[i][j]的位置清空为‘.’,其实这道题就是不断判断是否valid的过程,代码如下:
1 public class Solution { 2 public void solveSudoku(char[][] board) { 3 if(board==null||board.length==0) return; 4 solve(board); 5 } 6 public boolean solve(char[][] board){ 7 for(int i=0;i<board.length;i++){ 8 for(int j=0;j<board[0].length;j++){ 9 if(board[i][j]==‘.‘){ 10 for(char k=‘1‘;k<=‘9‘;k++){ 11 if(isvalid(board,i,j,k)){ 12 board[i][j] = k; 13 if(solve(board)) return true; 14 else board[i][j] = ‘.‘; 15 } 16 } 17 return false; 18 } 19 } 20 } 21 return true; 22 } 23 public boolean isvalid(char[][] board,int row,int col,char c){ 24 for(int i=0;i<9;i++){ 25 if(board[i][col]!=‘.‘&&board[i][col]==c) return false; 26 if(board[row][i]!=‘.‘&&board[row][i]==c) return false; 27 if(board[row/3*3+i/3][col/3*3+i%3]!=‘.‘&&board[row/3*3+i/3][col/3*3+i%3]==c) return false; 28 } 29 return true; 30 } 31 }
标签:思路 ted 利用 one img 修改 ber false commons
原文地址:http://www.cnblogs.com/codeskiller/p/6577870.html