码迷,mamicode.com
首页 > 其他好文 > 详细

36. Valid Sudoku

时间:2016-06-27 23:22:24      阅读:407      评论:0      收藏:0      [点我收藏+]

标签:

=============

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

The Sudoku board could be partially filled, where empty cells are filled with the character ‘.‘.

技术分享

A partially filled sudoku which is valid.

====

A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

----------------

一个合法的数独应该符合三条规则

1,每一行必须有数字1-9出现,而且必须出现一次

2,每一列必须有数字1-9出现,而且必须出现一次

3,面板中每9个连续的子面板,必须由数字1-9出现,而且必须出现一次

规则连接:http://sudoku.com.au/TheRules.aspx

思路:

先按照行检查,再按照列检查,最后对子面板检查

检查的过程是使用hash_table形式的数组实现的.

==================

code:

class Solution {
    /*一个合法的数独应该符合三条规则
     * 1,每一行必须有数字1-9出现,而且必须出现一次
     * 2,每一列必须有数字1-9出现,而且必须出现一次
     * 3,面板中每9个连续的子面板,必须由数字1-9出现,而且必须出现一次
     * 规则连接:http://sudoku.com.au/TheRules.aspx
     *
     *
     * 实现方法:
     * 先按照行检查,在按照列检查,最后对子面板检查
     * 检查的过程是使用hash_table形式的数组实现的
     *
     * */
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        bool used[9];
        for(int i = 0;i<9;i++){
            fill(used,used+9,false);

            for(int j = 0;j<9;j++){//check 行
                if(!check(board[i][j],used))
                    return false;
            }

            fill(used,used+9,false);
            for(int j = 0;j<9;j++){//check 列
                if(!check(board[j][i],used))
                    return false;
            }
        }

        for(int r = 0;r<3;r++){
            for(int c = 0;c<3;c++){
                fill(used,used+9,false);

                for(int i = r*3;i<r*3+3;i++){
                    for(int j = c*3;j<c*3+3;j++){
                        if(!check(board[i][j],used))
                            return false;
                    }
                }
            }
        }//for-for
    }//isValidSudoku
private:
    bool check(char ch,bool used[9]){
        if(ch == .) return true;
        if(used[ch - 1]) return false;/*
                                        char型字节码可以充当数组下表,
                                        利用char类型的字面值就可以索引char字面值<key>对应的数组值<value>
                                        这是数据结构hash_table的体现:  key->value
                                        */
        return used[ch-1] = true;
    }
};

 

36. Valid Sudoku

标签:

原文地址:http://www.cnblogs.com/li-daphne/p/5621797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!