Skip to content
Related Articles

Related Articles

Php Program to Check if all rows of a matrix are circular rotations of each other

Improve Article
Save Article
Like Article
  • Last Updated : 06 Jan, 2022

Given a matrix of n*n size, the task is to find whether all rows are circular rotations of each other or not. 

Examples: 

Input: mat[][] = 1, 2, 3
                 3, 1, 2
                 2, 3, 1
Output:  Yes
All rows are rotated permutation
of each other.

Input: mat[3][3] = 1, 2, 3
                   3, 2, 1
                   1, 3, 2
Output:  No
Explanation : As 3, 2, 1 is not a rotated or 
circular permutation of 1, 2, 3

The idea is based on below article. 
A Program to check if strings are rotations of each other or not

Steps :  

  1. Create a string of first row elements and concatenate the string with itself so that string search operations can be efficiently performed. Let this string be str_cat.
  2. Traverse all remaining rows. For every row being traversed, create a string str_curr of current row elements. If str_curr is not a substring of str_cat, return false.
  3. Return true.

Below is the implementation of above steps. 

PHP




<?php 
// PHP program to check if all rows of a 
// matrix are rotations of each other
$MAX = 1000;
  
// Returns true if all rows of mat[0..n-1][0..n-1]
// are rotations of each other.
function isPermutedMatrix( &$mat, $n)
{
    // Creating a string that contains 
    // elements of first row.
    $str_cat = "";
    for ($i = 0 ; $i < $n ; $i++)
        $str_cat = $str_cat . "-"
                   strval($mat[0][$i]);
  
    // Concatenating the string with itself 
    // so that substring search operations 
    // can be performed on this
    $str_cat = $str_cat . $str_cat;
  
    // Start traversing remaining rows
    for ($i = 1; $i < $n; $i++)
    {
        // Store the matrix into vector 
        // in the form of strings
        $curr_str = "";
        for ($j = 0 ; $j < $n ; $j++)
            $curr_str = $curr_str . "-" .
                        strval($mat[$i][$j]);
  
        // Check if the current string is present 
        // in the concatenated string or not
        if (strpos($str_cat, $curr_str))
            return true;
    }
  
    return false;
}
  
// Driver Code
$n = 4;
$mat = array(array(1, 2, 3, 4),
             array(4, 1, 2, 3),
             array(3, 4, 1, 2),
             array(2, 3, 4, 1));
if (isPermutedMatrix($mat, $n))
    echo "Yes";
else
    echo "No";
  
// This code is contributed by ita_c
?>

Output: 

Yes

Please refer complete article on Check if all rows of a matrix are circular rotations of each other for more details!


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!