Programa Php para verificar si todas las filas de una array son rotaciones circulares entre sí

Dada una array de tamaño n*n, la tarea es encontrar si todas las filas son rotaciones circulares entre sí o no. 

Ejemplos: 

Entrada : mat[][] = 1, 2, 3

                 3, 1, 2

                 2, 3, 1

Salida : Sí, todas las filas se rotan por permutación entre sí.
Entrada : mat[3][3] = 1, 2, 3

                   3, 2, 1

                   1, 3, 2

Salida : No, Explicación: Como 3, 2, 1 no es una permutación rotada o circular de 1, 2, 3

La idea se basa en el siguiente artículo. 
Un programa para verificar si las strings son rotaciones entre sí o no.

Pasos :  

  1. Cree una string de elementos de la primera fila y concatene la string consigo misma para que las operaciones de búsqueda de strings se puedan realizar de manera eficiente. Deje que esta string sea str_cat.
  2. Atraviese todas las filas restantes. Para cada fila que se recorre, cree una string str_curr de los elementos de la fila actual. Si str_curr no es una substring de str_cat, devuelve falso.
  3. Devolver verdadero.

A continuación se muestra la implementación de los pasos anteriores. 

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
?>
Producción

Yes

Complejidad temporal : O(n 3
Espacio auxiliar : O(n)

Consulte el artículo completo sobre Comprobar si todas las filas de una array son rotaciones circulares entre sí para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *