C++ Program to Check if all rows of a matrix are circular rotations of each other
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 permutationof each other.
Input: mat[3][3] = 1, 2, 3
3, 2, 1
1, 3, 2
Output: No , 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 :
- 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.
- 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.
- Return true.
Below is the implementation of above steps.
C++
#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000;
bool isPermutedMatrix( int mat[MAX][MAX], int n)
{
string str_cat = "" ;
for ( int i = 0 ; i < n ; i++)
str_cat = str_cat + "-" + to_string(mat[0][i]);
str_cat = str_cat + str_cat;
for ( int i=1; i<n; i++)
{
string curr_str = "" ;
for ( int j = 0 ; j < n ; j++)
curr_str = curr_str + "-" + to_string(mat[i][j]);
if (str_cat.find(curr_str) == string::npos)
return false ;
}
return true ;
}
int main()
{
int n = 4 ;
int mat[MAX][MAX] = {{1, 2, 3, 4},
{4, 1, 2, 3},
{3, 4, 1, 2},
{2, 3, 4, 1}
};
isPermutedMatrix(mat, n)? cout << "Yes" :
cout << "No" ;
return 0;
}
|
Time complexity : O(n3)
Auxiliary Space : O(n)
Please refer complete article on Check if all rows of a matrix are circular rotations of each other for more details!
Last Updated :
11 Jul, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...