Título: Duda sobre este ejercicio Publicado por: CarlosvAlencia en 15 Febrero 2014, 17:39 pm Hola buenas tardes a ver tengo una duda sobre un ejercicio : El ejercicio consiste en formar palabras de tamaño mayores o iguales que 3 con la condicion de que se sean palindromas. Es decir tu tienes un tablero de nxn caracteres y tienes que formar palabras con esa condicion y sin que se pueda usar la misma casilla en la palabra. Tengo el codigo casi echo pero no se como hacer lo de que no se use la misma casilla dos veces alguien me puede ayudar?
El codigo es este : public class Crossword { //Atributes private ArrayList<String> list; private char[][] panel; private int size; //Constructor public Crossword(int size , char[][] panel){ this.size=size; this.panel=panel; this.list = new ArrayList<String>(); } //Class anonima public Comparator<String> lexicographically = new Comparator<String>(){ public int compare(String o1, String o2) { if (o1.length() > o2.length()) { return 1; } else if (o1.length() < o2.length()) { return -1; } return o1.toString().compareToIgnoreCase(o2.toString()); } //Compare };//Comparator public void buildWords(int i, int j, int direction, String words){ int next_i=0; int next_j=0; switch (direction) { case 1: // Up next_i = i - 1; next_j = j; break; case 2: // Diagonal up right next_i = i - 1; next_j = j + 1; break; case 3: // Right next_i = i; next_j = j + 1; break; case 4: // Diagonal down right next_i = i + 1; next_j = j + 1; break; case 5: // Down next_i = i + 1; next_j = j; break; case 6: // Diagonal down left next_i = i + 1; next_j = j - 1; break; case 7: // Left next_i = i; next_j = j - 1; break; case 8: // Diagonal up left next_i = i - 1; next_j = j - 1; break; }//switch if ((next_i >= 0 && next_i < this.size) && (next_j >= 0 && next_j < this.size) ) { words = words + this.panel[j]; System.out.println(words); } if (words.length() >= 3) { int contador =0; String aux = ""; for(int h = words.length()-1; h>=0; h--){ aux = aux + words.charAt(h); } for(int l=0 ; l<=aux.length()-1 ; l++){ if(aux . charAt(j) == words.charAt(j)){ contador++; } } if(!this.list.contains(words) && contador == words.length()){ this.list.add(words); } } } public static void main(String[] args) { Scanner scan = new Scanner(System.in); //Declaracion de variables //Test indica el numero de test. //Size indica la longitud del tablero //Chart es una matriz de caracteres //Words es un vector de la clase Crossword //Text almacena la cadena de caracteres introducida por consola int test; int size; char[][] chart; Crossword[] words; ArrayList<String> words2; String text; //Leo los test que se quieren pasar System.out.println("Numero de test: "); test = scan.nextInt(); words = new Crossword[test]; int n=0; while(n<test){ System.out.println("Tamaño de tabla: "); size = scan.nextInt(); chart = new char[size][size]; for(int i = 0; i < chart.length; i++){ text = scan.next(); for(int j = 0; j < text.length(); j++){ /** * char charAt(int index) * Devuelve el carácter indicado * como índice. El primer carácter de la cadena será * el del índice 0. Junto con el método .length() podemos * recuperar todos los caracteres de la cadena de texto. */ chart[j] = text.charAt(j); }//for interno }//for externo 1 if(test-1==n){ words[n]=new Crossword(size,chart); for (int i = 0; i < size; i++){ for (int j = 0; j < size; j++){ // Las 8 direcciones de cada elemento for (int d = 1; d <= 8; d++){ words[n].buildWords(i, j, d, ""); } } } }else{ words[n]=new Crossword(size,chart); for (int i = 0; i < size; i++){ for (int j = 0; j < size; j++){ // Las 8 direcciones de cada elemento for (int d = 1; d <= 8; d++){ words[n].buildWords(i, j, d, ""); }//for }//for }//for }//else n++; }//while scan.close(); words2 = new ArrayList<String>(); int i =0; while ( i<words.length){ words2 = words.getList(); if(words.length-1==i){ for(String word : words2){ if(!word.isEmpty()){ System.out.println(word); }//if }//for each }//if else{ if(words.length-1!=i){ for(String word : words2){ if(!word.isEmpty()){ System.out.println(word); }//if }//for each System.out.println(""); }//if }//else i++; }//while }//Main public ArrayList<String> getList() { int i=0; while ( i < this.list.size()) Collections.sort(this.list, lexicographically); i++; return list; }//getList }//Crossword Título: Re: Duda sobre este ejercicio Publicado por: NikNitro! en 18 Febrero 2014, 15:01 pm Crea otro tablero de las mismas dimensiones lleno de true. Cuando vayas a usar una casilla comprueba que está en true. Cuando la uses, cambiala a false.
Creo que es lo que pides. Salud ;) |