// Processed by NMI's Java Code Viewer 4.8.2 © 1997-2000 B. Lemaire // Website: http://njcv.htmlplanet.com E-mail: info@njcv.htmlplanet.com // Copy registered to Evaluation Copy // Source File Name: Solver.java class Solver extends Thread { private Tangle parent; private int wordLength; private String letters[][]; private boolean used[][]; private int plusX[] = { -1, -1, -1, 0, 1, 1, 1, 0 }; private int plusY[] = { -1, 0, 1, 1, 1, 0, -1, -1 }; public Solver(int i, String s, Tangle tangle) { wordLength = i; parent = tangle; int j = (int)Math.sqrt(s.length()); if(s.length() % j != 0) throw new RuntimeException("Letters typed in do not form a grid."); letters = new String[j][j]; used = new boolean[j][j]; for(int k = 0; k < j; k++) { for(int l = 0; l < j; l++) { letters[l][k] = s.substring(k * j + l, k * j + l + 1); if(letters[l][k].equals("q")) letters[l][k] += "u"; used[l][k] = false; } } } public void run() { wordLength--; for(int i = 0; i < 5; i++) { wordLength++; for(int j = 0; j < letters[0].length; j++) { for(int k = 0; k < letters[0].length; k++) { solve(k, j, 0, ""); Thread.yield(); } } } } private void solve(int i, int j, int k, String s) { if(k == wordLength - 1) { s = s + letters[i][j]; if(parent.getDictionary().containsWord(s)) { parent.getCenterPanel().appendWord(s); return; } } else { used[i][j] = true; for(int j1 = 0; j1 < 8; j1++) { int l = i + plusX[j1]; int i1 = j + plusY[j1]; try { if(!used[l][i1]) { String s1 = s + letters[i][j]; solve(l, i1, k + 1, s1); } } catch(ArrayIndexOutOfBoundsException _ex) { } Thread.yield(); } used[i][j] = false; } } }