题目

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…

分析

36 Valid Sudoku本质相同的题目,上一题要求判定所给九宫格能否满足数独要求,本题要求给定唯一解。

所采取基本方法 — 遍历 , 遍历整个9*9宫格每一元素,对所有的 ′.′ 分别判定1~9是否满足要求,对于判定,我们采用上一题的思路,但是此时只需判定当前位置所在行、列、及3*3块是否满足要求即可。

AC代码

class Solution {
private:
const int N = 9;
public:
void solveSudoku(vector<vector<char>>& board) {
if (board.empty())
return;
isValidSudoku(board);
} bool isValidSudoku(vector<vector<char> > &board)
{
//所给非空九宫格
for (int r = 0; r < N; r++)
{
for (int c = 0; c < N; c++)
{
//如果当前为待填充数字
if ('.' == board[r][c])
{
for (int i = 1; i <= 9; i++)
{
board[r][c] = i + '0';
//判断当前填充数字是否合理
if (judge(board, r, c))
{
if (isValidSudoku(board))
return true;
}//if
board[r][c] = '.';
}//for
return false;
}//if
}//for
}//for
}//isValid //判断当前row,col中所填数字是否合理,只需要判断当前行,当前列,以及当前所在的3*3块
bool judge(vector<vector<char> > &board, int row, int col)
{
//(1)判断当前行
for (int j = 0; j < N; j++)
{
if (col != j && board[row][j] == board[row][col])
return false;
} //(2)判断当前列
for (int i = 0; i < N; i++)
{
if (row != i && board[i][col] == board[row][col])
return false;
}//for //(3)判断当前3*3块
for (int i = row / 3 * 3; i < (row / 3 + 1) * 3; ++i)
{
for (int j = col / 3 * 3; j < (col / 3 + 1) * 3; ++j)
{
if (row != i && j != col && board[row][col] == board[i][j])
return false;
}//for
}//for
return true;
}
};

GitHub测试程序源码

最新文章

  1. 第六百一十天how can I 坚持
  2. Unity Assets目录下的特殊文件夹名称
  3. 理解TCP可靠的通信
  4. 非spring环境中配置文件工具
  5. 设计模式(九):Composite组合模式 -- 结构型模式
  6. docker私服
  7. ios UIKit动力
  8. ssm+maven多模块项目整合
  9. 笔记3 装配Bean总结
  10. selenium+谷歌无头浏览器爬取网易新闻国内板块
  11. nginx学习路线
  12. java 图片转base64字符串、base64字符串转图片
  13. 如何获取view的大小
  14. Python技术之书籍汇总
  15. 20165223 结对编程之四则运算week2-整体总结
  16. java中equals()和==的区别
  17. C++ STL基本容器的使用(vector、list、deque、map、stack、queue)
  18. $.ajax的一些总结
  19. DELL平板如何安装WIN10系统-磁盘分区问题
  20. b4

热门文章

  1. Oracle 查询约束信息
  2. 关于C_Cpp的一些小结
  3. 自己写一个websocket
  4. centos7上使用locate命令-文件查找
  5. bzoj1878 [SDOI2009]HH的项链【莫队】
  6. 数论/暴力 Codeforces Round #305 (Div. 2) C. Mike and Frog
  7. 题解报告:poj 2480 Longge&#39;s problem(欧拉函数)
  8. MyBatsi-Mapper映射文件
  9. 数字(number)
  10. jQuery选择器之表单元素选择器