zoukankan      html  css  js  c++  java
  • 37. Sudoku Solver

    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 }
  • 相关阅读:
    还是不能偷懒ForEach陷阱
    备忘ForEach方法与foreach迭代器使用小区别
    备忘反射调用Private方法
    机器人也会梦见电子羊吗
    Windows 7 下Skype最小化到系统托盘
    编译Boost_1_37_0 For VS2008
    使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)
    SVN中“txncurrentlock:拒绝访问”错误
    幂函数的非递归算法
    Visual Studio中的文件类型(sln vcproj suo user ncb)
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6577870.html
Copyright © 2011-2022 走看看