当前位置:   article > 正文

[编程题]数独_数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在

数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在

数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。

如有多解,输出一个解

输入描述:

输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。

输出描述:

输出九行,每行九个空格隔开的数字,为解出的答案。

输入例子1:

 

输出例子1:

  1. import java.util.*;
  2. public class Main {
  3. private static boolean findAns = false;
  4. private static boolean check(int[][] dp, int row, int col, int val) {
  5. for(int i = 1; i < 10; i++) {
  6. if(val == dp[row][i]) {
  7. return false;
  8. }
  9. }
  10. for(int i = 1; i < 10; i++) {
  11. if(val == dp[i][col]) {
  12. return false;
  13. }
  14. }
  15. int rowLe = 1;
  16. while(rowLe + 3 <= row) {
  17. rowLe += 3;
  18. }
  19. int rowRi = rowLe + 3;
  20. int colLe = 1;
  21. while(colLe + 3 <= col) {
  22. colLe += 3;
  23. }
  24. int colRi = colLe + 3;
  25. for(int i = rowLe; i < rowRi; i++) {
  26. for(int j = colLe; j < colRi; j++) {
  27. if(rowLe == row && colLe == col) {
  28. continue;
  29. }
  30. if(val == dp[i][j]) {
  31. return false;
  32. }
  33. }
  34. }
  35. return true;
  36. }
  37. private static void dfs(int[][] dp, int row, int col) {
  38. if(col == 10) {
  39. row++;
  40. col = 1;
  41. }
  42. if(row == 10 && col == 1) {
  43. findAns = true;
  44. return;
  45. }
  46. if(dp[row][col] == 0) {
  47. for(int i = 1; i < 10; i++) {
  48. if(check(dp, row, col, i)) {
  49. dp[row][col] = i;
  50. dfs(dp, row, col + 1);
  51. if(findAns) {
  52. return;
  53. }
  54. dp[row][col] = 0;
  55. }
  56. }
  57. } else {
  58. dfs(dp, row, col + 1);
  59. }
  60. }
  61. private static void solve(Scanner sc) {
  62. int[][] dp = new int [10][10];
  63. for(int i = 1; i < 10; i++) {
  64. for(int j = 1; j < 10; j++) {
  65. dp[i][j] = sc.nextInt();
  66. }
  67. }
  68. findAns = false;
  69. dfs(dp, 1, 1);
  70. for(int i = 1; i < 10; i++) {
  71. System.out.print(dp[i][1]);
  72. for(int j = 2; j < 10; j++) {
  73. System.out.print(' ');
  74. System.out.print(dp[i][j]);
  75. }
  76. System.out.println();
  77. }
  78. }
  79. public static void main(String[] args) {
  80. Scanner sc = new Scanner(System.in);
  81. while(sc.hasNextInt()) {
  82. solve(sc);
  83. }
  84. }
  85. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/434285
推荐阅读
相关标签
  

闽ICP备14008679号