Guest User

Untitled

a guest
Jul 20th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1. package Sudoku;
  2. import java.util.LinkedList;
  3. public class Solver {
  4.  
  5. private int[][] matrix = new int[9][9]; //[row][column]
  6. private LinkedList<Sudoku> help=new LinkedList<Sudoku>();
  7. private boolean[][] isEditable=new boolean[9][9];
  8. private int[] pointer={0,0};
  9. private boolean finished=false;
  10. private int durchl=0;
  11.  
  12.  
  13. public Solver(int[][] matrix){
  14. help.add(new Sudoku(matrix, pointer));
  15. this.matrix=matrix;
  16. generateEditable(matrix);
  17. }
  18.  
  19. private void generateEditable(int[][] matrix){
  20. for(int i=0;i<9;i++){
  21. for(int j=0;j<9;j++){
  22. if(matrix[i][j]==0)isEditable[i][j]=true;
  23. else isEditable[i][j]=false;
  24. }
  25. }
  26.  
  27. }
  28.  
  29. private boolean isEditable(){
  30. return isEditable[pointer[0]][pointer[1]];
  31. }
  32.  
  33. public void solveField(int row, int column){
  34. /*System.out.println("Durchlauf: "+durchl++);
  35. System.out.println("Pointer: "+pointer[0]+" "+pointer[1]);
  36. output();*/
  37. int k=matrix[row][column];
  38. boolean b=Checker.check(matrix, row, column, k);
  39. while(!b&&k<9){
  40. k++;
  41. b=Checker.check(matrix, row, column, k);
  42. }
  43. if(b){
  44. matrix[row][column]=k;
  45. output();
  46. help.addLast(new Sudoku(matrix.clone(),pointer.clone()));
  47. next();
  48. }
  49. else {
  50. /*System.out.println("Groesse LinkedList: "+help.size());
  51. System.out.println("Pointer: "+pointer[0]+" "+pointer[1]);
  52. output();*/
  53. help.removeLast();
  54. pointer=help.getLast().getPointer().clone();
  55. matrix=help.getLast().getMatrix().clone();
  56. /*System.out.println("Groesse LinkedList: "+help.size());
  57. System.out.println("Pointer: "+pointer[0]+" "+pointer[1]);
  58. output();*/
  59. }
  60. }
  61.  
  62. public void solveSudoku(){
  63.  
  64. //pointer=help.getLast().getPointer().clone();
  65. //matrix=help.getLast().getMatrix().clone();
  66. /*if(help.size()==666){
  67. if(help.getFirst().getMatrix()==help.getLast().getMatrix()){
  68. System.out.println("FUCK OFF");
  69. }
  70. matrix=help.getFirst().getMatrix().clone();
  71. pointer=help.getFirst().getPointer().clone();
  72. output();
  73. System.out.println("Pointer: "+pointer[0]+" "+pointer[1]);
  74. }*/
  75. //pointer=help.getLast().getPointer().clone();
  76. if(isEditable()){
  77. solveField(pointer[0],pointer[1]);
  78. if(!finished)solveSudoku();
  79. }
  80. else{
  81. next();
  82. //help.add(new Sudoku(matrix.clone(),pointer.clone()));
  83. if(!finished)solveSudoku();
  84. }
  85.  
  86. }
  87.  
  88. private void next(){
  89. if(pointer[1]<8)pointer[1]++;
  90. else{
  91. pointer[1]=0;
  92. if(pointer[0]<8)pointer[0]++;
  93. else finished=true;
  94. }
  95. }
  96.  
  97. public int[][] getSolved() {
  98. return matrix;
  99. }
  100.  
  101. public void output(){
  102. for(int i=0;i<9;i++){
  103. for(int j=0;j<9;j++){
  104. System.out.print(matrix[i][j]+" ");
  105. }
  106. System.out.println();
  107. }
  108. System.out.println();
  109. }
  110. }
Add Comment
Please, Sign In to add comment