Páginas

domingo, 30 de enero de 2011

Generar la Matriz Caracol

Un problema clásico en la programación, especialmente cuando estamos iniciando a utilizar Arrays en un lenguaje de programación, una matriz es simplemente un array bidimensional, entonces ahora les mostrare el algoritmo y también solucionado en código java.
Una matriz caracol, como su nombre lo dice tiene, la siguiente forma para una matriz cuadrada, ejemplo matriz cuadrada de tamaño 5.

matriz caracol

Para ello necesitamos cuatro for’s que recorran los cuatro lados y uno extra para que repita esa operación en el caso de una dimensión 5 deberá repetirlo 2 veces y colocar un numero mas en el centro, en el caso de dimensión par entonces repetimos dimensión dividido entre 2 veces.

matriz caracol

En el diagrama de flujo, n es la dimensión de la matriz cuadrada y x es un numero con cual empezara a generar la matriz caracol. Vean el algoritmo en lenguaje de programación Java.

public static int[][] generarMatrizCaracol(int n, int x) {
   int[][] M = new int[n + 1][n + 1];
   for (int a = 1; a <= n / 2; a++) {
      for (int i = a; i <= n - a; i++) {
         M[a][i] = x;
         x++;
      }
      for (int i = a; i <= n - a; i++) {
         M[i][n - a + 1] = x;
         x++;
      }
      for (int i = n - a + 1; i >= a + 1; i--) {
         M[n - a + 1][i] = x;
         x++;
      }
      for (int i = n - a + 1; i >= a + 1; i--) {
         M[i][a] = x;
         x++;
      }
   }
   if (n % 2 == 1) {
      M[n / 2 + 1][n / 2 + 1] = x;
   }
   return M;
}

Tomar en cuenta que se genero matriz a partir de la posición (1, 1) sin embargo para la primera posición para Java es (0, 0), eso se lo cambia de manera sencilla. Descárguense el algoritmo en lenguaje de programación Java.

33 comentarios:

  1. También otro problema clásico es generar esta misma matriz con un solo ciclo repetitivo, pídanla y la publico pronto.

    ResponderEliminar
    Respuestas
    1. man pon la de con un solo ciclo repetitivo

      Eliminar
    2. Loco como creo cuadros magicos de 3x3,4x4 y 5x5 es con urgencia y lo necesito para dfd me ayuda?

      Eliminar
  2. Gracias por el aporte Me ha resultado curioso y entretenido entender el algoritmo

    ResponderEliminar
  3. que buena pagina muy bien compañero felicidades

    ResponderEliminar
  4. sube todo lo sea de informatica es interesante porfa.....

    ResponderEliminar
  5. Gracias por darse una vueltita por este blog, y muy pronto verán muchas novedades.

    ResponderEliminar
  6. Buenas y como puedo hacer para que me funcione con matrices nxm

    ResponderEliminar
  7. ke suave la matriz... me ayudo mucho gracias...

    ResponderEliminar
  8. esta muy bueno! existira un metodo mas corto para acerlo

    ResponderEliminar
  9. podrian ayudarme a resolver las torres de HANOI en lenguaje de c++por favor, no se como resolver, solo me dijeron q es muy conocido en programacion

    ResponderEliminar
  10. podrian ayudarme a resolver las torres de HANOI en lenguaje de c++por favor, no se como resolver, solo me dijeron q es muy conocido en programacion

    ResponderEliminar
  11. Pues podrias ver la solucion recursiva en http://es.wikipedia.org/wiki/Torres_de_Han%C3%B3i
    y puedes ver como funciona en http://soloinformaticayalgomas.blogspot.com/2011/03/solucion-animada-de-las-torres-de-hanoi.html

    ResponderEliminar
  12. buenisiimooo gracias me sirvio bastante sube con un solo ciclo repetitivo¡¡¡¡ please¡¡¡¡

    ResponderEliminar
  13. Hola existe el clásico problema de las 8 reinas. La idea es ubicar 8 reinas en un tablero de ajedrez sin que estas se amenacen. Una solución simple e iterativa es ideal, también generalizar la solución a un tablero de N x N casillas con N reinas. ¿Lo desean ver?

    ResponderEliminar
  14. comapañero Daniel muy buena tu pagina felicidades!!... no se si me puedas ayudar con un problema de matriz la cua es EL CUBO MAGICO t lo agradeceria mucho si me ayudas el cubo consta de q
    la suma de numeros de las filas, columnas y diagonal nos dan el mismo numero... t lo agradeceria mucho ya me ayudast con la matriz caracol gracias

    ResponderEliminar
  15. mamas daniel!! esa es la solucion mas larga no les hagas ilucionar a los demas con tus soluciones triviales!

    ResponderEliminar
    Respuestas
    1. Yo jamas dije la era la solución mas corta, (lee por favor) pero si es la opción natural, te aconsejo que busques la definición de trivial. Saludos.

      Eliminar
  16. hepl??? necesito generar la matriz caracol.. pero q exista un tiempo desde q apacere la primera a la segunda.. q cada una vaya apareciendo en un determinado tiempo.. en windows from.. porfa..

    ResponderEliminar
  17. tiene como resolver esta?
    dado a ordem 5?
    1 1 1 1 1
    1 2 2 2 1
    1 2 3 2 1
    1 2 2 2 1
    1 1 1 1 1

    ResponderEliminar
    Respuestas
    1. package EJERCICIOS;

      /**
      *
      * @author FACU
      */
      import java.util.Scanner;
      public class ejerM8 {

      public static void main(String[] args) {
      int i,n,j;
      int [][] A=new int[100][100];

      Scanner leer=new Scanner(System.in);
      System.out.printf("N*N = ");
      n=leer.nextInt();
      int c = 1,ini=0,lim=n-1;
      while(c<=n*n){
      for(i=ini;i<=lim;i++){
      A[ini][i]=c;

      }
      for(i=ini+1;i<=lim;i++){
      A[i][lim]=c;

      }
      for(i=lim-1;i>=ini;i--){
      A[lim][i]=c;

      }
      for(i=lim-1;i>ini;i--){
      A[i][ini]=c;

      }
      ini=ini+1;
      lim=lim-1;
      c=c+1;
      }
      for(i=0;i<n;i++){
      System.out.println(" ");
      for(j=0;j<n;j++){
      System.out.print(" ");
      System.out.print(A[i][j]);
      }
      }

      }
      }

      Eliminar
  18. me ayudan a resolver esto por favor en diagrama de flujo
    26 25 24 23 22 21
    27 10 9 8 7 20
    28 11 2 1 6 19
    29 12 3 4 5 18
    30 13 14 15 16 17
    31 32 33 34 35 36

    ResponderEliminar
  19. Alguiene podría colaborar con este ejercicio: llenar la matriz con la siguiente serie: 0,2,3,2,5,5,7,10,12

    ResponderEliminar
  20. si me pueden ayudar con el pseudocódigo para realizar una matriz en forma de caracol o espiral el visual basic 6.0

    ResponderEliminar
  21. Podrian ayudarme con la matriz caracol en pseint por favoooooooooooooooor

    ResponderEliminar
  22. sI QUIERO HACER EL CARACOL PERO DEBO EMPEZAR EN LA MITAD DE UNA MATRIZ CUDRADA IMPAR

    ResponderEliminar
  23. Necesito hacer una matriz de n*n, pero que se muestre en un datagridview en visual studio c#, alguien podria ayudarme porfavor

    ResponderEliminar

Deja tu comentario, agradecimiento, sugerencia o critica.