Open In App

Latin Square

A Latin Square is a n x n grid filled by n distinct numbers each appearing exactly once in each row and column. Given an input n, we have to print a n x n matrix consisting of numbers from 1 to n each appearing exactly once in each row and each column.

Examples : 

Input: 3
Output:  1 2 3
         3 1 2 
         2 3 1

Input: 5
Output:  1 2 3 4 5
         5 1 2 3 4
         4 5 1 2 3 
         3 4 5 1 2
         2 3 4 5 1

Did you find any pattern in which the number is stored in a Latin Square? 

Note: There may be more than one possible configuration of a n x n Latin square. 

Implementation:




// C++ program to print Latin Square
#include <iostream>
using namespace std;
  
// Function to print n x n Latin Square
void printLatin(int n)
{
    // A variable to control the rotation
    // point.
    int k = n+1;
  
    // Loop to print rows
    for (int i=1; i<=n; i++)
    {
        // This loops runs only after first
        // iteration of outer loop. It prints
        // numbers from n to k
        int temp = k;
        while (temp <= n)
        {
            cout << temp << " ";
            temp++;
        }
  
        // This loop prints numbers from 1 to k-1.
        for (int j=1; j<k; j++)
            cout << j << " ";
  
        k--;
        cout << endl;
    }
}
  
// Driver program to test above function
int main(void)
{
    int n = 5;
  
    // Invoking printLatin function
    printLatin(n);
  
    return 0;
}
  
// This code is contributed by kothavvsaakash.




// C program to print Latin Square
#include<stdio.h>
  
// Function to print n x n Latin Square
void printLatin(int n)
{
    // A variable to control the rotation
    // point.
    int k = n+1;
  
    // Loop to print rows
    for (int i=1; i<=n; i++)
    {
        // This loops runs only after first
        // iteration of outer loop. It prints
        // numbers from n to k
        int temp = k;
        while (temp <= n)
        {
            printf("%d ", temp);
            temp++;
        }
  
        // This loop prints numbers from 1 to k-1.
        for (int j=1; j<k; j++)
            printf("%d ", j);
  
        k--;
        printf("\n");
    }
}
  
// Driver program to test above function
int main(void)
{
    int n = 5;
  
    // Invoking printLatin function
    printLatin(n);
  
    return 0;
}




// Java program to print Latin Square
class GFG {
      
    // Function to print n x n Latin Square
    static void printLatin(int n)
    {
          
        // A variable to control the 
        // rotation point.
        int k = n+1;
      
        // Loop to print rows
        for (int i = 1; i <= n; i++)
        {
  
            // This loops runs only after
            // first iteration of outer 
            // loop. It prints
            // numbers from n to k
            int temp = k;
  
            while (temp <= n)
            {
                System.out.print(temp + " ");
                temp++;
            }
      
            // This loop prints numbers from
            // 1 to k-1.
            for (int j = 1; j < k; j++)
                System.out.print(j + " ");
      
            k--;
            System.out.println();
        }
    
          
    // Driver code
    public static void main (String[] args)
    {
        int n = 5;
          
        // Invoking printLatin function
        printLatin(n);
    }
}
  
// This code is contributed by Anant Agarwal.




# Python 3 program to print Latin Square 
  
# Function to print n x n Latin Square 
def printLatin(n): 
  
    # A variable to control the 
    # rotation point. 
    k = n + 1
  
    # Loop to print rows 
    for i in range(1, n + 1, 1): 
      
        # This loops runs only after first 
        # iteration of outer loop. It prints 
        # numbers from n to k 
        temp =
        while (temp <= n) :
            print(temp, end = " ")
            temp += 1
          
        # This loop prints numbers
        # from 1 to k-1. 
        for j in range(1, k):
            print(j, end = " "
  
        k -= 1
        print() 
  
# Driver Code
n = 5
  
# Invoking printLatin function 
printLatin(n) 
  
# This code is contributed by R_Raj




// C# program to print Latin Square
using System;
  
class GFG {
      
    // Function to print n x n
    // Latin Square
    static void printLatin(int n)
    {
          
        // A variable to control the 
        // rotation point.
        int k = n + 1;
      
        // Loop to print rows
        for (int i = 1; i <= n; i++)
        {
  
            // This loops runs only after
            // first iteration of outer 
            // loop. It prints numbers
            // from n to k
            int temp = k;
  
            while (temp <= n)
            {
                Console.Write(temp + " ");
                temp++;
            }
      
            // This loop prints numbers from
            // 1 to k-1.
            for (int j = 1; j < k; j++)
                Console.Write(j + " ");
      
            k--;
            Console.WriteLine();
        }
    
          
    // Driver code
    public static void Main ()
    {
        int n = 5;
          
        // Invoking printLatin function
        printLatin(n);
    }
}
  
// This code is contributed by KRV.




<?php
// PHP program to print Latin Square
  
// Function to print n x n Latin Square
function printLatin( $n)
{
    // A variable to control
    // the rotation point.
    $k = $n + 1;
  
    // Loop to print rows
    for ( $i = 1; $i <= $n; $i++)
    {
        // This loops runs only after
        // first iteration of outer loop.
        // It prints numbers from n to k
        $temp = $k;
        while ($temp <= $n)
        {
            echo $temp," ";
            $temp++;
        }
  
        // This loop prints numbers
        // from 1 to k-1.
        for ($j = 1; $j < $k; $j++)
            echo $j, " ";
  
        $k--;
        echo "\n";
    }
}
  
// Driver Code
$n = 5;
  
// Invoking printLatin function
printLatin($n);
  
// This code is contributed by anuj_67.
?>




<script>
  
    // Javascript program to print Latin Square
      
    // Function to print n x n
    // Latin Square
    function printLatin(n)
    {
            
        // A variable to control the 
        // rotation point.
        let k = n + 1;
        
        // Loop to print rows
        for (let i = 1; i <= n; i++)
        {
    
            // This loops runs only after
            // first iteration of outer 
            // loop. It prints numbers
            // from n to k
            let temp = k;
    
            while (temp <= n)
            {
                document.write(temp + " ");
                temp++;
            }
        
            // This loop prints numbers from
            // 1 to k-1.
            for (let j = 1; j < k; j++)
                document.write(j + " ");
        
            k--;
            document.write("</br>");
        }
    }
      
    let n = 5;
            
    // Invoking printLatin function
    printLatin(n);
      
</script>

Output
1 2 3 4 5 
5 1 2 3 4 
4 5 1 2 3 
3 4 5 1 2 
2 3 4 5 1 

Time Complexity: O(n*n)
Auxiliary Space: O(1)

 


Article Tags :