1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言判断一个数独是否合法 判断数独是否合法

c语言判断一个数独是否合法 判断数独是否合法

时间:2021-06-08 09:01:34

相关推荐

c语言判断一个数独是否合法 判断数独是否合法

题目:

请判定一个数独是否有效。

该数独可能只填充了部分数字,其中缺少的数字用 . 表示。

样例:

The following partially filed sudoku is valid.

思路:

什么是数独

Each row must have the numbers 1-9 occuring just once.

Each column must have the numbers 1-9 occuring just once.

And the numbers 1-9 must occur just once in each of the 9 sub-boxes of the grid.

数独的合法性

只要当前已经填充的数字是合法的就可以,不一定要这个数独是有解的。

所以,本题的思路就是使矩阵的每一行已有的数字不重复,每一列已有的数字不重复,每一个小九宫格的数字不重复。每次一个set来存储数字出现的状态。

参考答案:

class Solution {

public:

/*

* @param board: the board

* @return: whether the Sudoku is valid

*/

bool isValidSudoku(vector> &board) {

// write your code here

if(board.empty()) return false;

for(int i=0; i<9; i++){//检查每一行

map row; //未初始化的bool值是false

for(int j=0; j<9; j++){

if(board[i][j] != '.'){ //遇到‘.’就忽略掉

if(row[board[i][j]] == true){

return false;

}

else{

row[board[i][j]] = true;

}

}

}

}

for(int i=0; i<9; i++){//检测每一列

map col;

for(int j=0; j<9; j++){

if(board[j][i] != '.'){

if(col[board[j][i]] == true){

return false;

}

else{

col[board[j][i]] = true;

}

}

}

}

for(int i=0; i<9; i+=3){

for(int j=0; j<9; j+=3){//检查每一个小块

map block;

for(int k=0; k<9; k++){

if(board[i+k/3][j+k%3] != '.'){

if(block[board[i+k/3][j+k%3]] == true){

return false;

}

else{

block[board[i+k/3][j+k%3]] = true;

}

}

}

}

}

return true;

}

};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。