Cuadrado latino Java

Crear un cuadrado latino en Java

Programa para generar un cuadrado latino de orden N. 

Un cuadrado latino de orden N es una matriz cuadrada de N filas y N columnas en la que su primera fila contiene los N primeros números naturales y cada una de las filas siguientes contiene la rotación de la fila anterior un lugar a la derecha.

Por ejemplo, un cuadrado latino de orden 4 es una matriz cuadrada de tamaño 4 x 4 con el siguiente contenido:

  1  2  3  4
  4  1  2  3
  3  4  1  2
  2  3  4  1

Solución cuadrado latino:

/*
 * Programa que genera un cuadrado latino de orden N. 
 */
import java.util.Scanner;

public class CuadradoLatinoJava {

    public static void main(String[] args) {
        //leer el número de filas
        int N = leerFilas();
        
        //crear un cuadrado latino de orden N
        int[][] M = cuadradoLatino(N);

        //mostrar cuadrado latino 
        mostrarMatriz(M);

    }

    //método para introducir por teclado el orden del cuadrado latino
    public static int leerFilas() {
        Scanner sc = new Scanner(System.in);
        int filas;
        //lectura del número de filas
        do {
            System.out.print("Número de filas > 2: ");
            filas = sc.nextInt();
        } while (filas <= 2);
        return filas;
    }

    //método que crea un cuadrado latino de orden n
    public static int [][] cuadradoLatino(int n) {
        //se crea la matriz de n filas y n columnas
        int [][] a = new int[n][n];
        for (int j = 0; j < a.length; j++) { //en la primera fila guardamos los numeros desde 1 hasta N 
            a[0][j] = j + 1;
        }

        for (int i = 1; i < a.length; i++) { //para el resto de filas
            for (int j = 0; j < a[i].length; j++) {
                a[i][j] = a[i - 1][j]; //en cada fila copiamos la anterior
            }
            desplazarDerecha(a[i]);    //rotamos la fila actual un lugar a la derecha
        }
        return a;
    }

    //método que desplaza los elementos de un array de una dimensión un lugar a la derecha
    public static void desplazarDerecha(int[] a) {
        int aux = a[a.length - 1];               //se guarda el último elemento de la fila en la variable aux         
        for (int i = a.length - 1; i > 0; i--) { //se desplazan los elementos
            a[i] = a[i - 1];                     //copiando en cada elemeno el que tienen a su izquierda
        }
        a[0] = aux;    //finalmente se copia en el primer elemento el último que habíamos guarda en aux                     
    }

    //método para mostrar por pantalla la la matriz que contiene el cuadrado latino
    public static void mostrarMatriz(int[][] A) {
        for (int i = 0; i < A.length; i++) {
            for (int j = 0; j < A[i].length; j++) {
                System.out.printf("%5d", A[i][j]);
            }
            System.out.println();
        }
    }
}//fin cuadrado latino Java

No hay comentarios:

Publicar un comentario