• leetcode--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.

    This is a simple problem on dfs method

    public class Solution {
        public void solveSudoku(char[][] board){
            List<Integer> blankCells = new ArrayList<Integer>();
    		//a sudoku board is a 9 by 9 array
    		for(int i = 0; i < 81; ++i){
    		    if(board[i / 9][ i % 9 ] == '.')
    				blankCells.add(i);
    		}
    		dfs(board, 0, blankCells);
        }
    	
    	private boolean dfs(char[][] board, int start, List<Integer> blankCells) {
    		if(start == blankCells.size()) return true; //dfs reaches the end
    		//get the coordinates of the cell to be filled
    		int currentCoordinate = blankCells.get(start);
    		int row = currentCoordinate / 9;
    		int column = currentCoordinate % 9;
    		//fill a number in the cell
    		for(int num = 1; num < 10; ++num) {
    			//check the sudoku is valid after being filled num
    			if(isValid(num, board,row,column)) {
    				board[row][column] = (char)(num + '0');
    				if(dfs(board,start + 1, blankCells))
    					return true;
    				//if a solution can not be reached after the filling, we need to erase the filling for next try
    				board[row][column] = '.';
    			}
    		}
    		return false;
    	}
    	
    	private boolean isValid(int num, char[][] board, int row, int column) {
    		//check whether num is in the row, column and grid
    		for(int i = 0; i < 9; ++i){
    			if(board[row][i] -'0' == num) return false; //row 
    			if(board[i][column] - '0' == num) return false; //column
    			if(board[3 *(row / 3) + i / 3][3 * (column / 3) + i % 3] - '0' == num) return false;
    		}
    		return true;
        }
    }
    

      

  • 相关阅读:
    Servlet常用类
    Java库使用----xstream1.3.1
    字符串处理---统计每一行字符串当中的字符“u”个数
    读写锁
    求阶乘
    Fibonacci数列
    22.2-按照升序显示不重复的单词
    22.1-在散列集上进行集合操作
    完美世界-2015校园招聘-java服务器工程师-成都站
    运用jQuery写的验证表单
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3825376.html
Copyright © 2020-2023  润新知