zoukankan      html  css  js  c++  java
  • LeetCode 37 Sudoku Solver(求解数独)

     
    Problem : 解决数独问题,给出一个二维数组,将这个数独进行求解。
     
    思路:
    1. 嵌套循环,三层循环体,每一行,每一列,填入从1到9的数字。判断填入之后是否合理
    2. 判断数独是否合理的函数
     
    参考代码: 
     
    package leetcode_50;
    
    /***
     * 
     * @author pengfei_zheng
     * 求解数独问题
     */
    public class Solution37 {
        public static void solveSudoku(char[][] board) {
            if(board==null ||board.length ==0)
                    return;
            else
                    solve(board);
        }
    
        private static boolean solve(char[][] board) {
            for(int i = 0 ; i < 9;i++){
                for(int j = 0 ; j < 9;j++){
                    if(board[i][j]=='.'){
                        for(char c = '1'; c<='9';c++){
                            if(isValid(board,i,j,c)){
                                board[i][j]=c;
                                if(solve(board))
                                    return true;
                                else
                                    board[i][j]='.';
                            }
                        }
                        return false;
                    }
                }
            }
            return true;
        }
    
        private static boolean isValid(char[][] board, int row, int column, char c) {
            for(int i = 0 ; i < 9; i ++){
                if(board[row][i]==c) return false;
                if(board[i][column]==c) return false;
                if(board[3 * (row / 3) + i / 3][ 3 * (column / 3) + i % 3] != '.' && 
                        board[3 * (row / 3) + i / 3][3 * (column / 3) + i % 3] == c) return false; //check 3*3 block
            }
            return true;
        }
        public static void main(String[]args){
            long start = System.currentTimeMillis();
            char[][] board={{'8','.','.','.','.','.','.','.','.'},
                            {'.','.','3','6','.','.','.','.','.'},
                            {'.','7','.','.','9','.','2','.','.'},
                            {'.','5','.','.','.','7','.','.','.'},
                            {'.','.','.','.','4','.','7','.','.'},
                            {'.','.','.','1','.','5','.','3','.'},
                            {'.','.','1','.','.','.','.','6','8'},
                            {'.','.','8','5','.','.','.','1','.'},
                            {'.','9','.','.','.','.','4','.','.'}
                        };
            solveSudoku(board);
            long end = System.currentTimeMillis();
            for(int i = 0 ; i < 9 ; i ++){
                for(int j = 0 ; j < 9 ;j ++){
                    System.out.print(board[i][j]+" ");
                }
                System.out.println();
            }
            System.out.println("耗时: "+ (double)(end-start)/1000+" s");
        }
    }
  • 相关阅读:
    kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail
    XXE攻防技术
    CSRF与SSRF区别
    CSRF与SSRF区别
    elasticsearch基本概念理解+elasticsearch 的shards unassigned处理方法 -- 最佳运维实践
    prometheus 监控 redis + rabbitmq
    grafana的metric的计算语句
    python 配合 es 查询数据
    prometheus 监控 jar应用服务 + 修改监听IP和端口
    用Blackbox Exporter to Monitor web和端口
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6534906.html
Copyright © 2011-2022 走看看