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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / rompecabezas imposible en: 26 Enero 2018, 07:52 am
hola
tengo que programar el rompecabezas imposible en C de tal modo de que me quede una matriz 3 x 3 con números del 1 al 8 ordenados de manera aleatoria y que el lugar que le corresponde al nueve este vació, para después poder mover el espacio en blanco para ir acomodando los números.

3  2  5
8  1  6
7  4

el problema que tengo es que ya genero la matriz 3 x 3 ordenada de manera aleatoria con un espacio en blanco que se puede mover, pero no logro hacer que ese espacio en blanco sea el nueve ya que aveces toma otro numero.

1  8  6
9  5  7
2  4 

¿como podría hacerle para que el nueve siempre sea el espacio en blanco?

#include<stdio.h>
#include <time.h>
#include <windows.h>
 
bool verifica(int matriz[3][3], int i, int j, int nume){
   for(i = 0; i < 3; i++){
   for(j = 0; j < 3; j++){
      if(nume == matriz[j]){
         return false;
      }
   }
}
return true;
}

void imprimir_matriz();
 
int matriz[3][3];
int x= 2 ,y =2;
 
int main()   {
      int i, j, num;
   char caracter,enter;
   
   
srand(time(0));

for(i = 0; i < 3; i++){
   for(j = 0; j < 3; j++){
      num = 1 + rand() % 9;
      while(verifica(matriz, 3,3, num) == false){
         num = 1 + rand() % 9;
      }
      matriz[j] = num;
   }
}

for(i = 0; i < 3; i++){
   for(j = 0; j < 3; j++){
      if(matriz[j] != 0)   {
         
            
   }
}
printf("\n");
}
   matriz[y]
  • = 0;
   imprimir_matriz();
   do   {
      caracter = getchar();
      enter = getchar();
      switch(caracter)   {
         case 'w':   //arriba
            if(y <= 1)   {
               //Movimiento de ficha
               matriz[y]
  • = matriz[y+1]
  • ;
               matriz[y+1]
  • = 0;
               imprimir_matriz();
               y++;
            }
            else   {
               printf("Fuera de los limites\n");
            }
         break;
         case 's':   //abajo
            if(y >= 1)   {
               //Movimiento de ficha
               matriz[y]
  • = matriz[y-1]
  • ;
               matriz[y-1]
  • = 0;
               imprimir_matriz();
               y--;
            }
            else   {
               printf("Fuera de los limites\n");
            }
         break;
         case 'a':   //izquierda
            if(x <= 1)   {
               //Movimiento de ficha
               matriz[y]
  • = matriz[y][x+1];
               matriz[y][x+1] = 0;
               imprimir_matriz();
               x++;
            }
            else   {
               printf("Fuera de los limites\n");
            }
 
         break;
         case 'd':   //derecha
            if(x >= 1)   {
               matriz[y]
  • = matriz[y][x-1];
               matriz[y][x-1] = 0;
               imprimir_matriz();
               x--;
            }
            else   {
               printf("Fuera de los limites\n");
            }
         break;
         case '0':   //Salida
         break;
         default:
            printf("Caracter Incorrecto");
         break;
      }
      printf("Caracter : %c\n",caracter);
   }while(caracter != '0');
   return 0;
}
 
void imprimir_matriz()   {
   int i = 0,j;
   
   while(i < 3)   {
      j = 0;
      while(j < 3)   {
         if(matriz[j] != 0)   {
            printf("[%2i]",matriz[j]);
         }
         else   {
            printf("[  ]");
         }
         j++;
      }
      printf("\n");
      i++;
   }   
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines