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

        /*
         * 37. Sudoku Solver
         * 2015.12.13 by Mingyang
         * 1.长度标准:无
         * 2.可选的范围:所有木有值得点,选取从1到9的数字
         * 3.往前走一步:如果放进去是validate的,那就放
         * 4.后退一步:若果放进去,后面是false的,就把这个点改回来
         * 5.特别的case:无了
         * 6.关于重复:无
         * 本题目的isValid是难点
         * row = i / 3 * 3; row < i / 3 * 3 + 3
         */
        public void solveSudoku(char[][] board) {
            if (board == null || board.length == 0)
                return;
            helper(board);
        }
        private boolean helper(char[][] board) {
            for (int i = 0; i < board.length; i++) {
                for (int j = 0; j < board[0].length; j++) {
                    if (board[i][j] == '.') {
                        for (char num = '1'; num <= '9'; num++) {// 尝试
                            if (isValid(board, i, j, num)) {
                                board[i][j] = num;
                            if (helper(board))//这个点暂时合适,那么进入下一层
                                    return true;
                                else
                                    board[i][j] = '.';// 回退
                            }
                        }
                        return false;
                    }
                }
            }
            return true;
        }
        private boolean isValid(char[][] board, int i, int j, char c) {
            // check column
            for (int row = 0; row < 9; row++)
                if (board[row][j] == c)
                    return false;
            // check row
            for (int col = 0; col < 9; col++)
                if (board[i][col] == c)
                    return false;
            // check block
            for (int row = i / 3 * 3; row < i / 3 * 3 + 3; row++)
                for (int col = j / 3 * 3; col < j / 3 * 3 + 3; col++)
                    if (board[row][col] == c)
                        return false;
            return true;
        }
  • 相关阅读:
    day22【网络编程】
    day21【缓冲流、转换流、序列化流】
    day20【字节流、字符流】
    设计模式7-适配器模式
    设计模式6-状态模式
    设计模式5-观察者模式
    设计模式4-建造者模式
    Web Service与WCF与Web API区别
    设计模式3-外观模式
    设计模式2-模板方法模式
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5457399.html
Copyright © 2011-2022 走看看