elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Pisar todas las fichas de un tablero de ajedrez con caballo[SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pisar todas las fichas de un tablero de ajedrez con caballo[SOLUCIONADO]  (Leído 3,130 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Pisar todas las fichas de un tablero de ajedrez con caballo[SOLUCIONADO]
« en: 8 Junio 2014, 19:52 pm »

Hola a todos, se trata de resolver el problema de, dado un tablero de ajedrez de 5x5, pisar todas las casillas con un caballo (sin pisar la misma casilla 2+ veces)

Estoy intentando averiguar por qué este código no funciona
Código:
def nextMovement(posActual, movedores, iter):
    """ Devuelve el siguiente movimiento a realizar
        posActual: vector de 2 comp. (coords x e y) ==> posicion actual del caballo
        movedores: matriz de 2x8 que indica los posibles movimientos que se pueden hacer con el caballo
        iter: número que indica que movedor aplicar
    """
    casilla = [None] * 2
    casilla[0] = posActual[0] + movedores[0][iter]
    casilla[1] = posActual[1] + movedores[1][iter]
    return casilla

def casillaAdmisible(tablero, casilla):
    x=casilla[0]
    y=casilla[1]
    tam=len(tablero)
    if(x>=tam or y>=tam or x<0 or y<0 or tablero[x][y]!=0):
        return False
    return True

def mover(casilla, tablero, etapa):
    tablero[ casilla[0] ][ casilla[1] ] = etapa
    
def anularMovimiento(casilla, tablero):
    tablero[ casilla[0] ][ casilla[1] ] = 0

def backTrackingChessHorse(tablero, posActual, etapa, movedores):
    exito = False
    for i in range(len(movedores[0])):
        if(exito):
            break
        casilla = nextMovement(posActual, movedores, i)
        if not casillaAdmisible(tablero, casilla):
            continue
        aux=posActual
        mover(casilla, tablero, etapa)
        posActual=casilla
        if(etapa == len(tablero)**2):
            exito = True
        else:
            exito = backTrackingChessHorse(tablero, posActual, etapa + 1, movedores)
            if(not exito):
                anularMovimiento(casilla, tablero)
                posActual=aux
    return exito

def printTablero(tablero):
    for i in range(len(tablero)):
        print(tablero[i])
Problema: se consigue llegar a la etapa 25 (la última), pero nunca devuelve True, entre en bucle infinito.
No veo el error, ¿alguien puede ayudarme?


« Última modificación: 8 Junio 2014, 19:57 pm por SARGE553413 » En línea

SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Duda con problema: pisar todas las fichas de un tablero de ajedrez con caballo
« Respuesta #1 en: 8 Junio 2014, 19:57 pm »

SOLUCIONADO:

El algoritmo estaba bien. El problema era que desde el main ponia al caballo en las coordenadas [2][2] por ej. pero antes de entrar al algoritmo no indicaba en el tablero que la casilla [2][2] estaba pisada.

Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito 16 fichas de ajedrez para programa
Diseño Gráfico
juancho77 5 8,452 Último mensaje 24 Noviembre 2008, 20:50 pm
por peib0l
Detectar movimientos de piezas en tablero de ajedrez. « 1 2 »
Programación Visual Basic
E2E4 12 10,910 Último mensaje 4 Junio 2012, 09:29 am
por BlackZeroX
Caballo Ajedrez JAVA
Ejercicios
Kacoae 1 5,581 Último mensaje 17 Mayo 2013, 06:41 am
por Kacoae
Caballo del Ajedrez en JAVA
Ejercicios
Kacoae 2 17,872 Último mensaje 24 Febrero 2014, 14:47 pm
por gordo23
duda con tipo de fichas en tablero de ajedrez
Java
holamega12 0 2,189 Último mensaje 9 Mayo 2015, 19:00 pm
por holamega12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines