Código Java:
Ver originalpackage parcialbactraking;
public class ParcialBactraking {
String vertivalDecendente
= ""; String verticalAcendente
= ""; String horizontalDecendente
= ""; String horizontalAcendente
= ""; String diagonalDecendente
= ""; String diagonalAcendente
= ""; String transversalDecendente
= ""; String transversalAcendente
= "";
private char matrizSopaDeLetras[][]
= {{'F', 'L', 'O', 'R', 'E', 'C', 'E', 'X', 'P', 'K', 'A', 'N', 'M', 'H', 'L'},
{'G', 'W', 'P', 'S', 'M', 'B', 'B', 'F', 'S', 'V', 'D', 'A', 'S', 'E', 'B'},
{'Y', 'R', 'J', 'Ù', 'J', 'A', 'O', 'D', 'W', 'A', 'O', 'O', 'M', 'R', 'C'},
{'K', 'Q', 'A', 'L', 'Z', 'K', 'R', 'Á', 'M', 'C', 'R', 'S', 'A', 'M', 'E'},
{'A', 'E', 'C', 'C', 'G', 'C', 'V', 'A', 'U', 'A', 'A', 'O', 'D', 'O', 'T'},
{'Y', 'F', 'U', 'Z', 'I', 'I', 'U', 'I', 'V', 'C', 'R', 'Z', 'R', 'S', 'F'},
{'U', 'V', 'I', 'N', 'D', 'A', 'I', 'I', 'M', 'I', 'F', 'B', 'E', 'A', 'A'},
{'D', 'I', 'D', 'I', 'O', 'E', 'S', 'Z', 'L', 'O', 'L', 'Ñ', 'H', 'S', 'M'},
{'A', 'C', 'A', 'Ñ', 'F', 'V', 'D', 'A', 'H', 'N', 'O', 'L', 'N', 'Ñ', 'I'},
{'N', 'L', 'R', 'O', 'K', 'M', 'I', 'N', 'É', 'E', 'J', 'E', 'O', 'W', 'L'},
{'T', 'W', 'A', 'S', 'I', 'C', 'O', 'O', 'R', 'S', 'B', 'É', 'Í', 'S', 'I'},
{'E', 'V', 'K', 'Ú', 'E', 'S', 'C', 'E', 'L', 'E', 'B', 'R', 'A', 'N', 'A'},
{'L', 'V', 'C', 'P', 'M', 'Q', 'E', 'M', 'E', 'J', 'O', 'R', 'P', 'R', 'U'},
{'R', 'M', 'S', 'Z', 'P', 'R', 'E', 'S', 'E', 'N', 'T', 'E', 'Ñ', 'R', 'A'},
{'B', 'E', 'K', 'W', 'A', 'K', 'O', 'B', 'S', 'E', 'Q', 'U', 'I', 'O', 'S'}};
private final int[][] marca = new int[matrizSopaDeLetras.length][matrizSopaDeLetras[0].length];
public static void main
(String[] args
) { new ParcialBactraking();
}
public ParcialBactraking() {
buscarConBactraking(0, 0, "ESPECIAL");
}
private void buscarConBactraking
(int x,
int y,
String palabra
) { if (x >= 0 && y >= 0 && x < matrizSopaDeLetras.length && y < matrizSopaDeLetras[0].length && marca[x][y] != 1) {
if (noVistos() != 0) {
if (palabra.charAt(0) == matrizSopaDeLetras[x][y]) {
recorrer(x, y, palabra, 0, 0);
String resultado
= imprirResultado
(x, y, palabra
); if (!resultado.equals("vacio")) {
marcarVistos();
System.
out.
println(resultado
); return;
}
}
}
} else {
return;
}
marca[x][y] = 1;
buscarConBactraking(x + 1, y + 1, palabra);
buscarConBactraking(x - 1, y - 1, palabra);
buscarConBactraking(x + 1, y - 1, palabra);
buscarConBactraking(x - 1, y + 1, palabra);
buscarConBactraking(x + 1, y, palabra);
buscarConBactraking(x, y + 1, palabra);
buscarConBactraking(x - 1, y, palabra);
buscarConBactraking(x, y - 1, palabra);
}
private void recorrer
(int x,
int y,
String comparacion,
int m,
int i
) { if (m < comparacion.length()) {
if (i < matrizSopaDeLetras.length) {
if (x + i < matrizSopaDeLetras.length) {
vertivalDecendente += matrizSopaDeLetras[x + i][y];
}
if (x - i >= 0) {
verticalAcendente += matrizSopaDeLetras[x - i][y];
}
if (y + i < matrizSopaDeLetras[0].length) {
horizontalDecendente += matrizSopaDeLetras[x][y + i];
}
if (y - i >= 0) {
horizontalAcendente += matrizSopaDeLetras[x][y - i];
}
if (x + i < matrizSopaDeLetras.length && y + i < matrizSopaDeLetras[0].length) {
diagonalDecendente += matrizSopaDeLetras[x + i][y + i];
}
if (x - i >= 0 && y - i > 0) {
diagonalAcendente += matrizSopaDeLetras[x - i][y - i];
}
if (x - i >= 0 && y + i < matrizSopaDeLetras[0].length) {
transversalAcendente += matrizSopaDeLetras[x - i][y + i];
}
if (y - i >= 0 && x + i < matrizSopaDeLetras.length) {
transversalDecendente += matrizSopaDeLetras[x + i][y - i];
}
recorrer(x, y, comparacion, m, i + 1);
} else {
recorrer(x, y, comparacion, m + 1, 0);
}
}
}
private String imprirResultado
(int x,
int y,
String comparacion
) {
if (verticalAcendente.contains(comparacion)) {
return ("Si encontro en verticar Acendente: " + x + "," + y);
}
if (horizontalDecendente.contains(comparacion)) {
return ("Si encontro en horizontal decreciente: " + x + "," + y);
}
if (horizontalAcendente.contains(comparacion)) {
return ("Si encontro en horizontal Acendente: " + x + "," + y);
}
if (diagonalAcendente.contains(comparacion)) {
return ("Si encontro en diagonal Acendente: " + x + "," + y);
}
if (diagonalDecendente.contains(comparacion)) {
return ("Si encontro en diagonal Decendente: " + x + "," + y);
}
if (transversalAcendente.contains(comparacion)) {
return ("Si encontro en transversal Acendente: " + x + "," + y);
}
if (transversalDecendente.contains(comparacion)) {
return ("Si encontro en transversal Decendente: " + x + "," + y);
}
return "vacio";
}
private int noVistos() {
for (int[] marca1 : marca) {
for (int j = 0; j < marca.length; j++) {
if (marca1[j] == 0) {
return 1;
}
}
}
return 0;
}
private void marcarVistos() {
for (int[] marca1 : marca) {
for (int j = 0; j < marca.length; j++) {
marca1[j] = 1;
}
}
}
}