Probé el problema ‘Impresión espiral de matriz’ durante 2 días. Incluso después de ver la solución, sigo fallando. ¿Qué tengo que hacer?

FÁCIL SOLUCIÓN A CONTINUACIÓN:

Para imprimir una matriz NxN en orden de espiral, siga el siguiente truco:

Cada matriz tiene 4 esquinas [0,0] [0, N-1] [N-1, N-1] [N-1,0]. Ahora solo haga una función con la entrada N = tamaño de matriz y matriz ->

func (N, mat [N] [N]) {

if (N == 1) {elemento PRINT; }

if (N == 2) {IMPRIMIR todas las esquinas; }

más{

IMPRIMIR primera esquina [0,0] -> luego imprimir línea b / n primera y segunda esquina;

IMPRIMIR segunda esquina [0, N-1] -> luego imprima la línea b / n segunda y tercera esquina;

IMPRIMIR tercera esquina [N-1, N-1] -> luego línea b / w tercera y cuarta esquina;

IMPRIMIR cuarta esquina [0, N-1] -> luego línea b / w cuarta y primera esquina;

DETENER. // la primera espiral está completa. Ahora entraremos en la segunda espiral. Como estamos imprimiendo ambas esquinas de la matriz NxN, la nueva matriz será de tamaño (N-2) X (N-2).

}

func (N-2, mat [N-2] [N-2]);

}

CASO BASE Y ANÁLISIS:

SI (N es INCLUSO) para que la recursividad de N-2 llegue a la matriz 2X2 y termine .-> así que solo imprima todas las esquinas.

Si (N es ODD), la recursividad de N-2 alcanzará la matriz 1X1, así que solo imprima un elemento.

Hay 2 formas de imprimir matriz en orden espiral.

  1. Iterativo.
  2. Recursivo.

En este enfoque, nos centraremos en el enfoque iterativo.

En el enfoque iterativo, necesitamos mantener 4 variables rowStart, rowLength, colStart, colLength que ayuda a imprimir la matriz en forma de espiral.

De izquierda a derecha.
Mueva la variable i desde rowStart hasta colLength. (Imprima datos desde la primera fila hasta la última columna).

De arriba hacia abajo.
Mueva la variable i desde (rowStart + 1) hasta rowLength. (Imprimir datos en la última columna hasta)
Necesitamos comenzar desde (rowStart + 1) porque ya imprimimos el elemento de esquina en la impresión de izquierda a derecha y no es necesario volver a incluirlo. El mismo tratamiento para elementos de esquina en otras direcciones.

De derecha a izquierda
Mueva la variable i desde colLength-1 hasta colStart. (Imprimir datos en la última fila)

De abajo hacia arriba.

Mueva la variable i desde rowLength-1 hasta rowStart. (Imprimir datos en la primera columna)

Después de imprimir las 4 direcciones, en la próxima iteración,
necesitamos comenzar desde la segunda fila y la segunda columna, así que incremente
(rowStart ++) y (colStart ++).
Necesitamos imprimir hasta la segunda última columna y hasta la segunda última fila, así que decremente
(colLength -) y (rowLength -).

Explicación detallada con el programa completo: matriz de impresión en forma espiral

Avíseme si aún tiene problemas para comprenderlo.

More Interesting

¿Es CLRS realmente una 'introducción'? Si es así, ¿qué sigue?

¿Por qué son importantes las pruebas para estudiar algoritmos y estructuras de datos? ¿Estudiar esas pruebas complejas es realmente necesario?

Cómo encontrar el promedio de todos los múltiplos de un número de un rango de números

¿Es normal tener un título en CS y no ser capaz de implementar algoritmos simples?

¿Cuál es la complejidad Big-O de una búsqueda lineal?

¿Cómo comparamos la complejidad del espacio y el tiempo como O (n ^ 2) tiempo versus O (n) espacio y O (n) tiempo?

¿Cuáles son los mejores algoritmos actuales de visión por computadora que pueden aprender a reconocer un objeto (digamos una flor) a partir de una sola imagen?

¿Cuál sería un algoritmo eficiente para ordenar millones de líneas de cadenas / enteros en un archivo?

¿Cuál es el enfoque para resolver GSS1 y GSS3 en SPOJ usando árboles de segmentos?

¿Alguna vez ha enviado un artículo científico sobre un algoritmo que funciona tan bien como los métodos más modernos pero realmente no sabe por qué? ¿Puedes decir 'tal vez' al explicar tu método?

¿Cuál de estos me dará la mejor oportunidad para usar los algoritmos y las estructuras de datos que se enseñan en el desarrollo web de la escuela o el desarrollo móvil?

¿Qué debo hacer después de aprender Python? ¿Programación competitiva o aprender Djanjo o aprender algoritmos y estructura de datos en Python?

¿Cómo estudiar efectivamente estructuras de datos y algoritmos? ¿Simplemente memorizo ​​cómo funcionan

¿Estaría de acuerdo en que el aprendizaje profundo es el único algoritmo que rige sobre todos los demás algoritmos en el aprendizaje automático?

Cómo elegir métricas de error para el algoritmo de aprendizaje automático