src/de/uapcore/sudoku/Solver.java

changeset 5
8ddf4af937d7
parent 3
ed931970b4ac
child 7
2c0a2766461c
equal deleted inserted replaced
4:b8588e318001 5:8ddf4af937d7
36 } 36 }
37 37
38 public boolean check(Field f) { 38 public boolean check(Field f) {
39 int line[]; 39 int line[];
40 for (int i = 0 ; i < 9 ; i++) { 40 for (int i = 0 ; i < 9 ; i++) {
41 line = getRow(f, i); 41 line = f.getRow(i);
42 if (!valid(line)) { 42 if (!valid(line)) {
43 return false; 43 return false;
44 } 44 }
45 line = getColumn(f, i); 45 line = f.getColumn(i);
46 if (!valid(line)) { 46 if (!valid(line)) {
47 return false; 47 return false;
48 } 48 }
49 } 49 }
50 50
51 int square[][]; 51 int square[][];
52 for (int x = 0 ; x < 3 ; x++) { 52 for (int x = 0 ; x < 3 ; x++) {
53 for (int y = 0 ; y < 3 ; y++) { 53 for (int y = 0 ; y < 3 ; y++) {
54 square = getSquare(f, x, y); 54 square = f.getSquare(x, y);
55 if (!valid(square)) { 55 if (!valid(square)) {
56 return false; 56 return false;
57 } 57 }
58 } 58 }
59 } 59 }
80 } 80 }
81 return true; 81 return true;
82 } 82 }
83 83
84 private boolean valid(int[] line) { 84 private boolean valid(int[] line) {
85 int numbers[] = new int[9]; 85 int numbers[];
86 numbers = new int[9];
86 for (int i = 0 ; i < 9 ; i++) { 87 for (int i = 0 ; i < 9 ; i++) {
87 int l = line[i]-1; 88 int l = line[i]-1;
88 if (l >= 0) { 89 if (l >= 0) {
89 if (++numbers[l] > 1) { 90 if ((++numbers[l]) > 1) {
90 return false; 91 return false;
91 } 92 }
92 } 93 }
93 } 94 }
94 95
96 } 97 }
97 98
98 private boolean valid(int[][] square) { 99 private boolean valid(int[][] square) {
99 int[] line = new int[9]; 100 int[] line = new int[9];
100 for (int x = 0 ; x < 3 ; x++) { 101 for (int x = 0 ; x < 3 ; x++) {
101 for (int y = 0 ; y < 3 ; y++) { 102 System.arraycopy(square[x], 0, line, 3*x, 3);
102 line[3*x+y] = square[x][y];
103 }
104 } 103 }
105 return valid(line); 104 return valid(line);
106 } 105 }
107
108 private int[][] getSquare(Field f, int x, int y) {
109 if (x < 0 || x > 2 || y < 0 || y > 2) {
110 throw new IllegalArgumentException("Invalid square coordinates");
111 }
112 int[][] square = new int[3][3];
113
114 for (int u = 0 ; u < 3 ; u++) {
115 for (int v = 0 ; v < 3 ; v++) {
116 square[u][v] = f.getCellValue(3*x+u, 3*y+v);
117 }
118 }
119
120 return square;
121 }
122
123 private int[] getRow(Field f, int y) {
124 if (y < 0 || y > 8) {
125 throw new IllegalArgumentException("Invalid row number");
126 }
127 int row[] = new int[9];
128
129 for (int x = 0 ; x < 9 ; x++) {
130 row[x] = f.getCellValue(x, y);
131 }
132
133 return row;
134 }
135
136 private int[] getColumn(Field f, int x) {
137 if (x < 0 || x > 8) {
138 throw new IllegalArgumentException("Invalid column number");
139 }
140 int column[] = new int[9];
141
142 for (int y = 0 ; y < 9 ; y++) {
143 column[y] = f.getCellValue(x, y);
144 }
145
146 return column;
147 }
148 } 106 }

mercurial