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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito ayuda ¡¡ Desplazamineto del caballo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda ¡¡ Desplazamineto del caballo  (Leído 2,014 veces)
Marco_ant

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Necesito ayuda ¡¡ Desplazamineto del caballo
« en: 13 Mayo 2014, 07:23 am »

Hola a todos tengo una duda con este codigo( lenguaje c ), es de el movimiento del caballo de ajedrez, se supone que tiene que tiene que abarcar todos lo cuadros del tablero sin pasar por uno mas de una vez, solo que me repite números en el tablero, ayuda por favor

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define ncuad n*n
  4. #define n 8
  5.  
  6.  
  7. void mover(int matriz1[][n],int i, int pos_x, int pos_y, int *q);
  8.  
  9. const int ejex[8] = { -1,-2,-2,-1, 1, 2, 2, 1 },
  10.          ejey[8] = { -2,-1, 1, 2, 2, 1,-1,-2 };
  11.  
  12. int main (void)
  13.  
  14. {
  15.  
  16.  
  17.  
  18.    int matriz1[n][n],i,j,q;
  19.  
  20.    for(i=0;i<n;i++)
  21.    {
  22.        for(j=0;j<n;j++)
  23.        {
  24.            matriz1[i][j]=0;
  25.        }
  26.    }
  27.  
  28.  
  29.    matriz1[0][0]=1;
  30.    mover(matriz1,2,0,0,&q);
  31.  
  32.    printf("\n\t");
  33.    printf("Estos son los valores de la matriz \n\n");
  34.    printf("\t\t MATRIZ ORDENADA ");
  35.    for(i=0;i<n;i++)
  36.    {
  37.        printf("\n");
  38.        for(j=0;j<n;j++)
  39.        {
  40.            printf("%6d", matriz1[i][j]);
  41.        }
  42.    }
  43.  
  44.    printf("\n");
  45.  
  46.  
  47.    return 0;
  48. }
  49. void mover(int matriz1[][n],int i, int pos_x, int pos_y, int *q)
  50. {
  51.  int k, u, v;
  52.  
  53.  k = 0;
  54.  *q = 0;
  55.  do {
  56.    u = pos_x + ejex[k]; v = pos_y + ejey[k]; /* seleccionar candidato */
  57.    if (u >= 0 && u < n && v >= 0 && v < n) { /* esta dentro de los limites? */
  58.      if (matriz1[u][v] == 0) {  /* es valido? */
  59.        matriz1[u][v] = i;  /* anota el candidato */
  60.        if (i < ncuad) {  /* llega al final del recorrido? */
  61.          mover(matriz1,i+1,u,v,q);
  62.        if (*q) matriz1[u][v] = 0; /* borra el candidato */
  63.        }
  64.        else *q = 1; /* hay solucion */
  65.      }
  66.    }
  67.    k++;
  68.  } while (!*q && k < 8);
  69. }
  70.  


[MOD] Para publicar codigo, usar etiquetas GeShi, gracias.


« Última modificación: 13 Mayo 2014, 15:35 pm por simorg » En línea

Randomize
Colaborador
***
Desconectado Desconectado

Mensajes: 20.599


Beautiful Day


Ver Perfil
Re: Necesito ayuda ¡¡ Desplazamineto del caballo
« Respuesta #1 en: 13 Mayo 2014, 13:40 pm »

¡¡¡ Qué manía con poner los deberes por el foro !!!  :D :D :D


Yo también tengo deberes y no los pongo  ::)


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Necesito ayuda ¡¡ Desplazamineto del caballo
« Respuesta #2 en: 13 Mayo 2014, 16:10 pm »

deberías repensar un poco el algoritmo.

Las constantes deberían ir en mayúsculas, ayuda a identificarlas dentro del código... sobretodo si le das nombres tan "currados" como "n".

Por otro lado, el parámetro "int *q" no es necesario para tu código. Puedes conseguir el mismo efecto haciendo que la función "mover" devuelva un entero para indicar si se ha encontrado una solución o no.

Luego, fíjate que tienes la línea

Código
  1. if (*q) matriz1[u][v] = 0; /* borra el candidato */

Es decir, si hay solución, entonces te cargas la solución encontrada?? ¿No debería ser al reves?

Aplicando los cambios a mí me funciona:

Código:

        Estos son los valores de la matriz

                 MATRIZ ORDENADA
     1     8    11    16     3    18    13    64
    10    27     2     7    12    15     4    19
    53    24     9    28    17     6    63    14
    26    39    52    23    62    29    20     5
    43    54    25    38    51    22    33    30
    40    57    42    61    32    35    48    21
    55    44    59    50    37    46    31    34
    58    41    56    45    60    49    36    47
En línea

Marco_ant

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Necesito ayuda ¡¡ Desplazamineto del caballo
« Respuesta #3 en: 16 Mayo 2014, 20:11 pm »

Que cambios mencionas no te entiedo??
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Necesito ayuda ¡¡ Desplazamineto del caballo
« Respuesta #4 en: 16 Mayo 2014, 20:49 pm »

Código
  1. if (!*q) matriz1[u][v] = 0; /* borra el candidato */

¡¡¡¡ Saluditos! ..... !!!!




P.D: Tarda algo más de 30 segundos en encontrar la solución.

Citar
       Estos son los valores de la matriz


                 MATRIZ ORDENADA

      1     8    11    16      3    18    13   64
    10    27     2     7     12    15      4   19
    53    24      9   28    17      6    63   14
    26    39    52    23    62    29    20    5
    43    54    25    38    51    22    33   30
    40    57    42    61    32    35    48   21
    55    44    59    50    37    46    31   34
    58    41    56    45    60    49    36   47

Process returned 0 (0x0)   execution time : 32.015 s
Press any key to continue.







« Última modificación: 16 Mayo 2014, 21:20 pm por leosansan » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Vaca pare un caballo! « 1 2 »
Foro Libre
ignorantev1.1 16 10,966 Último mensaje 1 Noviembre 2010, 15:40 pm
por [L]ord [R]NA
problema con caballo de ajedrez!!! « 1 2 »
Programación C/C++
danic++ 18 13,869 Último mensaje 8 Diciembre 2010, 17:44 pm
por Littlehorse
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,874 Último mensaje 24 Febrero 2014, 14:47 pm
por gordo23
Necesito ayuda con solucion del caballo de ajedrés en php
Desarrollo Web
BlackNoizE 7 3,008 Último mensaje 12 Febrero 2018, 21:30 pm
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines