2020-03-24 22:23:32

问题描述:

编写一个程序,通过已填充的空格来解决数独问题。

一个数独的解法需遵循如下规则:

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
空白格用 '.' 表示。

一个数独。

答案被标成红色。

提示:

给定的数独序列只包含数字 1-9 和字符 '.' 。
你可以假设给定的数独只有唯一解。
给定数独永远是 9x9 形式的。

问题求解:

经典的DFS问题,可以使用回溯法解决。

    int[][] rows = new int[9][9];
int[][] cols = new int[9][9];
int[][] boxes = new int[9][9]; public void solveSudoku(char[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
char c = board[i][j];
if (c == '.') continue;
int k = c - '0';
rows[i][k - 1] = 1;
cols[j][k - 1] = 1;
boxes[i / 3 * 3 + j / 3][k - 1] = 1;
}
}
helper(board, 0, 0);
} private boolean helper(char[][] board, int row, int col) {
if (row >= 9) return true;
int nr = row;
int nc = col + 1;
if (col == 8) {
nr = nr + 1;
nc = 0;
}
if (board[row][col] != '.') return helper(board, nr, nc);
for (int i = 1; i <= 9; i++) {
if (rows[row][i - 1] == 1 || cols[col][i - 1] == 1 || boxes[row / 3 * 3 + col / 3][i - 1] == 1) continue;
rows[row][i - 1] = 1;
cols[col][i - 1] = 1;
boxes[row / 3 * 3 + col / 3][i - 1] = 1;
board[row][col] = (char)(i + '0');
if (helper(board, nr, nc)) return true;
board[row][col] = '.';
rows[row][i - 1] = 0;
cols[col][i - 1] = 0;
boxes[row / 3 * 3 + col / 3][i - 1] = 0;
}
return false;
}

  

最新文章

  1. Android学习——windows下搭建NDK_r9环境
  2. hdu 1181(DFS)变 形 课
  3. cas+shiro实现不时时的去请求cas进行身份验证
  4. BZOJ 1012 题解
  5. transition&amp;transform,CSS中过度和变形的设置
  6. HTML 透明、阴影,圆角等知识点
  7. [转载]Jmeter那点事&#183;ForEach和If控制器
  8. 『Python』 ThreadPool 线程池模板
  9. C# 方法的可选参数、命名参数
  10. ACE的构建(VC++6.0环境)
  11. C#邮件收发
  12. Mesos初步尝试
  13. iOS开发基础-九宫格坐标(1)
  14. Nginx拦截指定国家的IP
  15. JAVA中验证邮箱是否有效
  16. linux init命令
  17. 【Linux 进程】孤儿进程、僵尸进程和守护进程
  18. gson转换对象为json字符串时对特殊字符编码的问题
  19. .NET后台访问其他站点代码整理
  20. 【转】获取Windows系统明文密码神器

热门文章

  1. App自动化测试方案
  2. JavaScript 設計模型 - Iterator
  3. AI超越人类大脑,或许是场“别有用心者”的骗局
  4. 初学Qt——tableview操作
  5. symfony 5.05 dev安装为了更好的迭代更新
  6. 华为的Java面试题,仅供参考。
  7. sql--自链接(推荐人)
  8. 【Geek议题】当年那些风骚的跨域操作
  9. 前端javascript知识(一)
  10. 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询