zoukankan      html  css  js  c++  java
  • 37. 解数独_困难_矩阵

     dfs,主要记住结束递归要用return

    class Solution {
    
        int judge(char [][]board,int iIndex,int jIndex,char s){
            int flag = 0;
            for(int j=0;j<9;j++){
                if(board[iIndex][j] == s && jIndex!=j) flag=1;
            }
            for(int i=0;i<9;i++){
                if(iIndex !=i && board[i][jIndex]==s) flag = 1;
            }
            for(int i=(iIndex-iIndex%3);i <(iIndex-iIndex%3+3);i++){
                for(int j=(jIndex-jIndex%3);j<(jIndex-jIndex%3+3);j++){
                    if(i!=iIndex && jIndex!=j && board[i][j]==board[iIndex][jIndex]){
                        flag =1;
                        break;
                    }
                }
            }
            return flag;
        }
    
        void f(int level,int num,char[][]board,char[][]result,int [][]array){
    
    //        System.out.println("=================");
            if(level==num){
                for(int i=0;i<9;i++){
                    for(int j=0;j<9;j++){
                        result[i][j] = board[i][j];
                    }
                }
                return;
            }else{
                for(int i =0;i<9;i++){
                    board[array[level][0]][array[level][1]] = (char)('1'+i);
                    if(judge(board,array[level][0],array[level][1],board[array[level][0]][array[level][1]])==0){
                        f(level+1,num,board,result,array);
                    }
                    board[array[level][0]][array[level][1]] = '.';
    
                }
    
            }
        }
        public void solveSudoku(char[][] board) {
            int num = 0;
    
            for(int i=0;i<9;i++){
                for(int j=0;j<9;j++){
                    if(board[i][j]=='.'){
                        num++;
                    }
                }
            }
            int [][] array = new int[num][2];
            int index =0;
            for(int i=0;i<9;i++){
                for(int j=0;j<9;j++){
                    if(board[i][j]=='.'){
                        array[index][0] = i;
                        array[index++][1] = j;
                    }
                }
            }
            char[][] result = new char[board.length][board.length];
            f(0,num,board,result,array);
            for(int i=0;i<9;i++){
                for(int j=0;j<9;j++){
                    board[i][j] = result[i][j];
                }
            }
        }
    
    }
    作者:你的雷哥
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    greta一些简单实用的字符串匹配
    内存管理
    粒子系统
    资源的后台加载
    GRETA正则表达式模板类库
    便利的开发工具log4cpp快速使用指南
    vc/mfc/vs2005下正则表达式源代码编程/微软greta Regular Expressions
    GRETA库在VS 2005环境下的编译经验
    揭开正则表达式的神秘面纱
    greta简单使用
  • 原文地址:https://www.cnblogs.com/henuliulei/p/15354867.html
Copyright © 2011-2022 走看看