zoukankan      html  css  js  c++  java
  • LeetCode 36 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.

    思路1:使用暴力DFS
    public class Solution {
    	private boolean isValidSudoku(char[][] board, int row, int column) {
    		int i, j;
    		int[] valid1 = new int[10];
    		int[] valid2 = new int[10];
    		int[] valid3 = new int[10];
    		for (i = 0; i <9; i++) {
    			if (board[i][column] != '.') {
    				if (valid1[board[i][column] - '0'] > 0)
    					return false;
    				valid1[board[i][column] - '0']++;
    			}
    			if (board[row][i] != '.') {
    				if (valid2[board[row][i] - '0'] > 0)
    					return false;
    				valid2[board[row][i] - '0']++;
    			}
    		}
    		for (i = (row / 3) * 3; i < (row / 3 + 1) * 3; i++) {
    			for (j = (column / 3) * 3; j < (column / 3 + 1) * 3; j++) {
    				if (board[i][j] != '.') {
    					if (valid3[board[i][j] - '0'] > 0)
    						return false;
    					valid3[board[i][j] - '0']++;
    				}
    			}
    		}
    		return true;
    	}
    
    	private boolean internalSolveSudoku(char[][] board) {
    		for (int i = 0; i < 9; i++) {
    			for (int j = 0; j < 9; j++) {
    				if (board[i][j] == '.') {
    					for (int k = 1; k <= 9; k++) {
    						board[i][j] = (char) ('0' + k);
    						if (isValidSudoku(board, i, j)) {
    							if (internalSolveSudoku(board)) {
    								return true;
    							}
    						}
    						board[i][j] = '.';
                            return false;
    					}
    				}
    
    			}
    		}
    		return true;
    	}
    
    	public void solveSudoku(char[][] board) {
    		internalSolveSudoku(board);
    	}
    }
    思路2:使用Dancing Links,代码后补。




    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    CentOS 6.3下安装腾达USB无线网卡遇到的问题及解决方法
    验证resneXt,densenet,mobilenet和SENet的特色结构
    比较语义分割的几种结构:FCN,UNET,SegNet,PSPNet和Deeplab
    比较 VGG, resnet和inception的图像分类效果
    强化学习基础
    深度学习的知识点
    卷积神经网络CNN
    信息论的知识点
    理论机器学习
    计算理论基础
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4632527.html
Copyright © 2011-2022 走看看