• Lunes 23 de Diciembre de 2024, 17:03

Autor Tema:  Ayuda Necesito El Codigo De Ocho Reinas  (Leído 5069 veces)

angelio10

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Ayuda Necesito El Codigo De Ocho Reinas
« en: Jueves 21 de Junio de 2007, 16:24 »
0
:hola:  xfa necesito urgente el codigo de 8 reinas graciaas es para un proyecto

maldicion

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Ayuda Necesito El Codigo De Ocho Reinas
« Respuesta #1 en: Jueves 21 de Junio de 2007, 19:14 »
0
mira de pura casualidad me lo tope jajajaj hay va

/* OchoReinasApplet.java
 * Fecha de creación: 29-oct-2004
 * Autor: Juan Pavón Mestras
 * Universidad Complutense Madrid, 2004
 *
 * Adaptación al español del de T. Budd (An Introduction to Object Oriented Programming)
 * y con algunos cambios en los métodos buscaSolución y avanzar.
 *
 */
package java04Tecnicas;

import java.applet.Applet;
import java.awt.*;


class Reina {
   // atributos
   private int fila;
   private int columna;
   private Reina vecina;

   // constructor
   Reina (int c, Reina v) {
      fila = 1;   // empieza a buscar una solución desde la primera fila
      columna = c; // la columna que se le ha asignado a esta reina
      vecina = v;   // referencia a la reina de la izquierda
   }

   public boolean buscaSolución() {
      // si está bien colocada (nadie la puede atacar) ya es una solución:
      if ( vecina == null || !vecina.puedeAtacar(fila, columna) ) return true;
      
      // si no, intenta avanzar a una posición donde no la puedan atacar:
      if ( avanzar() ) return true;   
      
      return false; // no se ha encontrado una solución
   }

   public boolean avanzar() {   
      if ( fila < 8 ) {   // avanzar una posición y mira si hay solución
         fila++;
         return buscaSolución();
      }

      // si no puede avanzar, intenta que lo hagan las vecinas:
      if ( vecina != null  && !vecina.avanzar() )      return false;
      //if ( vecina == null  || !vecina.avanzar() )      return false;

      // habiendo avanzado la vecina,
      // vuelve a la primera fila para encontrar una nueva solución:
      fila = 1;   
      return buscaSolución();   
   }

   private boolean puedeAtacar(int testfila, int testcolumna) {
      int diferenciaColumnas = testcolumna - columna;
      if (   (fila == testfila) ||                  // en la misma fila
            (fila + diferenciaColumnas == testfila) ||   // o en una diagonal
            (fila - diferenciaColumnas == testfila))
         return true;
      
      if (vecina != null)      // mira si es atacable por las demás reinas de la izda.
         return vecina.puedeAtacar(testfila, testcolumna);
      
      return false;           // la posición no es atacable
   }

   public void pintaReinas (Graphics g) {
      // primero pinta las vecinas
      if (vecina != null)      vecina.pintaReinas(g);
      
      // y luego a sí misma
      // x, y es la esquina superior izquierda
      int x = (fila - 1) * 50;
      int y = (columna - 1) * 50;
      g.drawLine(x+5, y+45, x+45, y+45);
      g.drawLine(x+5, y+45, x+5, y+5);
      g.drawLine(x+45, y+45, x+45, y+5);
      g.drawLine(x+5, y+35, x+45, y+35);
      g.drawLine(x+5, y+5, x+15, y+20);
      g.drawLine(x+15, y+20, x+25, y+5);
      g.drawLine(x+25, y+5, x+35, y+20);
      g.drawLine(x+35, y+20, x+45, y+5);
      g.drawOval(x+20, y+20, 10, 10);
   }
   
   void print() {
      // primero lista las vecinas
      if ( vecina!=null )   vecina.print();
      // y luego su propia posición
      System.out.println("columna "+columna+ " fila "+fila);
   }

} // fin de class Reina


public class OchoReinasApplet extends Applet {
   private Reina últimaReina;

   public void init() {
      últimaReina = null;
      for (int i = 1; i <= 8; i++) {
         // crea una reina
         últimaReina = new Reina(i, últimaReina);
         // e intenta colocarla sin que nadie le ataque
         últimaReina.buscaSolución();
      }
   }

   public void paint(Graphics g) {
      // pinta el tablero
      for (int i = 0; i <= 8; i++) {
         g.drawLine(50 * i, 0, 50*i, 400);
         g.drawLine(0, 50 * i, 400, 50*i);
      }
      // pinta las reinas
      últimaReina.pintaReinas(g);
   }

   public boolean mouseDown(java.awt.Event evt, int x, int y) {
      últimaReina.avanzar();  // busca otra solución
      repaint();
      return true;
   }
   
   public static void main(String[] args) { // hace lo mismo que el applet
      int cuenta = 0; // cuenta de todas las posibles soluciones
      Reina ultimaReina = null;
      
      for (int i = 1; i <= 8; i++) {
         // crea una reina
         ultimaReina = new Reina(i, ultimaReina);
         // e intenta colocarla sin que nadie le ataque
         if ( !ultimaReina.buscaSolución() )
               System.out.println("No hay solución");
      }   
         
      System.out.println("Soluciones al problema de las 8 reinas");
      do {
         System.out.println("\nSolución " + ++cuenta + " ==============" );
         ultimaReina.print();
      }
      while ( ultimaReina.avanzar() );   }
}

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Ayuda Necesito El Codigo De Ocho Reinas
« Respuesta #2 en: Jueves 21 de Junio de 2007, 19:15 »
0
Cita de: "angelio10"
:hola:  xfa necesito urgente el codigo de 8 reinas graciaas es para un proyecto
 :angry:  :angry: , no se hacen tareas.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"