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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Caballos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Caballos  (Leído 2,728 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Caballos
« en: 27 Noviembre 2013, 21:02 pm »

Saludos, tengo un programa que dado un tamaño n de un tablero, me diga cual es el numero maximo de caballos que se pueden colocar en ese tablero sin atacarse? y de cuantas formas, el programa me tiene que dar maximo 10 soluciones solamente.

e hice un codigo que me pida una (x,y) aleatoria para poner en esa casilla al caballo y despues calcular los 8 movimientos posibles y asegurarme que no haya otra pieza en ninguna de esas 8 casillas que marque, para que no se ataquen,en caso de que si haya otro caballo que pueda atacar pedir otra (x,y) aleatoria, y asi sucesivamente hasta que tengo el total de caballos en el tablero, como son 10 tableros maximo, a cada uno le saco el numero total de caballos y esos totales los almaceno en un arreglo para despues buscar con una funcion el mayor de ellos. y ese seria mi maximo. Pero el problema es que ese no es el maximo, porque solo son 10 tableros, pero por ejemplo si fueran 20 tableros a los que les calculo su total de caballos puede ser que en alguno de esos haya un numero de caballos mayor que al mayor que calcule de los 10 tableros que tenia

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #define NO_CASILLAS_DISPONIBLES 0
  6. #define MAX_SOLUCIONES 10
  7.  
  8. void inicializarTablero(char **tablero,int n);
  9. int insertarCaballos(char **tablero,int fila,int columna,int casillasDisponibles,int numCaballos,int n);
  10. int verificarMovimientos(char **tablero,int fila,int columna,int casillasDisponibles,int n);
  11. void imprimirTablero(char **tablero,int n);
  12. int maximoCaballos(int totalCaballos[]);
  13.  
  14. int main()
  15. {
  16.    FILE *fd;
  17.    int n,i,j = 0,fila,columna,numCaballos,totalCaballos[MAX_SOLUCIONES],casillasDisponibles,MaxCaballos;
  18.    char **tablero;
  19.    do
  20.    {
  21.        printf("Dame tamanio de tablero: ");
  22.        scanf("%d",&n);
  23.    }while(n < 2 || n > 20);/*
  24.     if((fd = fopen("caballos_xx.txt","w"))!=NULL)
  25.     {*/
  26.        srand(time(NULL));
  27.        tablero = malloc(n*sizeof(char*));
  28.        for(i = 0;i < n;i++)
  29.           tablero[i] = malloc(n);
  30.        while(j < MAX_SOLUCIONES)
  31.        {
  32.            numCaballos = 0;
  33.            casillasDisponibles = n*n;
  34.            fila = rand() % n;
  35.            columna = rand() % n;
  36.            printf("(%d,%d)\n",fila,columna);
  37.            inicializarTablero(tablero,n);
  38.            totalCaballos[j] = insertarCaballos(tablero,fila,columna,casillasDisponibles,numCaballos,n);
  39.            imprimirTablero(tablero,n);
  40.            printf("\n\nEl numero maximo de caballos en esta solucion es de %d\n",totalCaballos[j]);
  41.            j++;
  42.        }
  43.        MaxCaballos = maximoCaballos(totalCaballos);
  44.        printf("\nEl numero maximo de caballos en un tablero de %d x %d sin atacarse es %d\n",n,n,MaxCaballos);/*
  45.     }
  46.     else
  47.        printf("No se pudo crear archivo");*/
  48.    return 0;
  49. }
  50.  
  51. void inicializarTablero(char **tablero,int n)
  52. {
  53.    int i,j;
  54.    for(i = 0;i < n;i++)
  55.    {
  56.        for(j = 0;j < n;j++)
  57.           tablero[i][j] = '0';
  58.    }
  59. }
  60.  
  61. int insertarCaballos(char **tablero,int fila,int columna,int casillasDisponibles,int numCaballos,int n)
  62. {
  63.    if(casillasDisponibles > NO_CASILLAS_DISPONIBLES)
  64.    {
  65.        if(tablero[fila][columna] == '0')
  66.        {
  67.            tablero[fila][columna] = 'C';
  68.            casillasDisponibles = verificarMovimientos(tablero,fila,columna,casillasDisponibles,n);
  69.            numCaballos++;
  70.            fila = rand() % n;
  71.            columna = rand() %n;
  72.            insertarCaballos(tablero,fila,columna,casillasDisponibles,numCaballos,n);
  73.        }
  74.        else
  75.        {
  76.            fila = rand() % n;
  77.            columna = rand() %n;
  78.            insertarCaballos(tablero,fila,columna,casillasDisponibles,numCaballos,n);
  79.        }
  80.    }
  81.    else
  82.       return numCaballos;
  83. }
  84.  
  85. int verificarMovimientos(char **tablero,int fila,int columna,int casillasDisponibles,int n)
  86. {
  87.    int i,j,nuevaFila,nuevaColumna,eliminadas;
  88.    eliminadas = casillasDisponibles-1;
  89.    nuevaFila = fila + 2;
  90.    nuevaColumna = columna -1;
  91.    if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
  92.    {
  93.        tablero[nuevaFila][nuevaColumna] = 'x';
  94.        eliminadas--;
  95.    }
  96.    nuevaFila = fila + 2;
  97.    nuevaColumna = columna + 1;
  98.    if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
  99.    {
  100.        tablero[nuevaFila][nuevaColumna] = 'x';
  101.        eliminadas--;
  102.    }
  103.    nuevaFila = fila + 1;
  104.    nuevaColumna = columna - 2;
  105.    if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
  106.    {
  107.        tablero[nuevaFila][nuevaColumna] = 'x';
  108.        eliminadas--;
  109.    }
  110.    nuevaFila = fila + 1;
  111.    nuevaColumna = columna + 2;
  112.    if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
  113.    {
  114.        tablero[nuevaFila][nuevaColumna] = 'x';
  115.        eliminadas--;
  116.    }
  117.    nuevaFila = fila - 2;
  118.    nuevaColumna = columna - 1;
  119.    if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
  120.    {
  121.        tablero[nuevaFila][nuevaColumna] = 'x';
  122.        eliminadas--;
  123.    }
  124.    nuevaFila = fila - 2;
  125.    nuevaColumna = columna + 1;
  126.    if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
  127.    {
  128.        tablero[nuevaFila][nuevaColumna] = 'x';
  129.        eliminadas--;
  130.    }
  131.    nuevaFila = fila - 1;
  132.    nuevaColumna = columna - 2;
  133.    if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
  134.    {
  135.        tablero[nuevaFila][nuevaColumna] = 'x';
  136.        eliminadas--;
  137.    }
  138.    nuevaFila = fila - 1;
  139.    nuevaColumna = columna + 2;
  140.    if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
  141.    {
  142.        tablero[nuevaFila][nuevaColumna] = 'x';
  143.        eliminadas--;
  144.    }
  145.    return eliminadas;
  146. }
  147.  
  148. void imprimirTablero(char **tablero,int n)
  149. {
  150.     int i,j;
  151.     for(i = 0;i < n;i++)
  152.     {
  153.         printf("\n");
  154.         for(j = 0;j < n;j++)
  155.            printf("[%c]",tablero[i][j]);
  156.     }
  157.     printf("\n");
  158. }
  159.  
  160. int maximoCaballos(int totalCaballos[])
  161. {
  162.     int Maximo,i;
  163.     Maximo = totalCaballos[0];
  164.     for(i = 1;i < MAX_SOLUCIONES;i++)
  165.     {
  166.         if(totalCaballos[i] > Maximo)
  167.            Maximo = totalCaballos[i];
  168.     }
  169.     return Maximo;
  170. }
  171.  
  172.  

este es el codigo, pero no entiendo como puedo hacer que me saque el maximo posible sin necesidad de cambiar todo el codigo, me costo un poco de trabajo hacerlo y entender como iba a ser el algoritmo y todo, por eso no  quiero empezar desde 0, si pudieran ayudarme se los agradeceria muchisimo

de antemano gracias


« Última modificación: 27 Noviembre 2013, 21:07 pm por m@o_614 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Simular Carrera de Autos (o caballos)
Java
raulespinoza 3 15,997 Último mensaje 10 Junio 2009, 16:29 pm
por KaOs_NiGhT
[Juego] Carreras de caballos.
Programación Visual Basic
79137913 7 10,077 Último mensaje 3 Abril 2012, 19:10 pm
por 79137913
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines