Skip to content
Related Articles

Related Articles

Improve Article
Latin Square
  • Difficulty Level : Basic
  • Last Updated : 18 May, 2021

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? 
 

  • In the first row, the numbers are stored from 1 to n serially.
  • In the second row, the numbers are shifted to the right by one column. i.e, 1 is stored at 2nd column now and so on.
  • In the third row, the numbers are shifted to the right by two columns. i.e, 1 is stored at 3rd column now and so on.
  • We continue the same way for the remaining rows.

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

C++




// C++ program to pritn 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




// Java program to pritn 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




# Python 3 program to print Latin Square
 
# Function to prn x n Latin Square
def printLatin(n):
 
    # A variable to control the
    # rotation point.
    k = n + 1
 
    # Loop to prrows
    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 = k
        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#




// 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
// 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.
?>

Javascript




<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 

Reference: 
https://en.wikipedia.org/wiki/Latin_square
This article is contributed by Pratik Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes 




My Personal Notes arrow_drop_up
Recommended Articles
Page :