Ver Mensaje Individual
  #11  
Antiguo 14-09-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
Asi ha quedado:
Código PHP:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

enum booleanos {false,true};

void RandomSuffle(int **listaint nElements){
   
//en un for voy recorriendo todos y calculo con rand la nueva posición y lo intercambio.
   
int xypos, *aux;
   for(
y=0;y<nElements;y++){
      
pos=rand()%nElements;
      if(
pos != y){
            
aux=lista[pos];
            
lista[pos]=lista[y];
            
lista[y]=aux;
     }
   }
}

void RellenarDeltas(int **deltas){
   
int yxi=0;

   for (
= -1<= 1y++){
      for(
= -1<= 1x++){
         if(!(
== && == 0)){
            
deltas[i][0]=y;
            
deltas[i][1]=x;
            
i++;
         }
      }
   }
}

int main()
{
    
int zxi=0nProbados, **deltas, **coordenadasnFilasnColumnasError=false;
   
struct{
      
int x;
      
int y;
   }
posicion;

   
srand(time(0));

   
nFilas=8;
   
nColumnas=2;
   
   
//Obtengo memoria dinamicamente para el array que contendrá los deltas
   
if(( deltas = (int**)malloc(nFilas*sizeof(int*))) == NULL){
      
Error true;
   }else{
      for ( 
0nFilasi++ ){
        if(( 
deltas[i] = (int*)malloc(nColumnas*sizeof(int))) == NULL )
           
Error true;
      }
   }

   if(!
Error){
      
i=0;
      
nFilas=10;
      
nColumnas=8;

      
nFilas *= nColumnas;
      
nColumnas=1;
      if(( 
coordenadas = (int**)malloc(nFilas*sizeof(int*))) == NULL){
         
Error true;
      }else{
         for ( 
0nFilasi++ ){
            if(( 
coordenadas[i] = (int*)malloc(nColumnas*sizeof(int))) == NULL ){
               
Error true;
            }
         }
      }

      if(!
Error){
         for(
i=0i<nFilasi++)
            
coordenadas[i][0]=i;

         
//Barajo las coordenadas posibles
         
RandomSuffle(coordenadas,nFilas*nColumnas);

         
nFilas=10;
         
nColumnas=8;
         
nProbados=0;

         
//Obtengo las coordenadas para X e Y
         
for(i=0i<nColumnas*nFilasi++){
            
posicion.coordenadas[i][0]%nColumnas;
            
posicion.coordenadas[i][0]/nColumnas;

            
RellenarDeltas(deltas);
            
RandomSuffle(deltas8);

            for(
z=0z<8z++){
               
//Aqui tengo que llamar a la funcion que haga uso de los deltas y de las coordenadas ya barajados
               
printf("X=%i, Y=%i, deltaX=%i, deltaY=%i\n"posicion.xposicion.ydeltas[z][0], deltas[z][1]);
               
nProbados++;
            }
         }
         
printf("\nProbados %i opciones"nProbados);
      }
   }
   
getchar();
    return 
0;

Para ese caso en concreto probaria 640 posibilidades sin repetir ninguna y digamos que seria aleatorio el orden. Son 10 filas, 8 columnas y por cada posicion se pueden dar 8 combinaciones de deltas diferentes con lo que seria 8*10*8=640. Eso es lo que queria conseguir. Ahora me queda acomodarlo con el de la sopa de letras para que repita eso con cada palabra y listo. Se que tiene un coste de procesado y memoria elevados pero se acaba el problema del bucle infinito cuando no pueda acomodar la palabra.
Responder Con Cita