Maison > développement back-end > C++ > Utilisez le programme C pour imprimer une matrice spirale n x n, en utilisant l'espace supplémentaire O(1)

Utilisez le programme C pour imprimer une matrice spirale n x n, en utilisant l'espace supplémentaire O(1)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-09-06 11:53:08
avant
918 Les gens l'ont consulté

Étant donné un entier positif n, construisez une matrice spirale n x n en utilisant uniquement O (1) espace supplémentaire dans le sens des aiguilles d'une montre

Une matrice spirale est une matrice qui fonctionne comme une spirale, elle partira de l'origine du cercle , tournez dans le sens des aiguilles d’une montre. La tâche consiste donc à imprimer la matrice sous forme de spirale en utilisant l'espace O(1) à partir de 2 → 4 → 6 → 8 → 10 → 12 → 14 → 1 6→ 18.

Ci-dessous l'exemple de matrice spirale -

使用C程序打印n x n的螺旋矩阵,使用O(1)额外空间

Exemple

Input: 3
Output:
   9 8 7
   2 1 6
   3 4 1
Copier après la connexion

Il devient facile de résoudre le code avec un espace infini, mais ce n'est pas aussi efficace que le programme optimal, ou le code est efficace à la fois en mémoire et en temps . Ainsi, pour maintenir l'ordre en spirale, quatre boucles sont utilisées, une chacune pour les coins supérieur, droit, inférieur et gauche de la matrice, mais si nous divisons la matrice en deux parties, les coins supérieur droit et inférieur gauche, nous pouvons directement utiliser ceci concept

< p> pour la moitié supérieure droite,

mat[i][j] = (n-2*x)*(n-2*x)-(i-x)-(j-x)
Copier après la connexion

pour la moitié inférieure gauche,

mat[i][j] = (n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)
Copier après la connexion

note-nous écrivons un programme pour l'impression de multiples de matrice de 2

algorithm

rreee

example

rreee

output

Si nous exécutons le programme ci-dessus, il générera le résultat suivant : 

int spiralmatrix(int n)
START
STEP 1: DECLARE i, j, a, b, x
STEP 2: LOOP FOR i = 0 AND i < n AND i++
   LOOP FOR j = 0 AND j < n AND j++
      FIND THE MINIMUM IN (i<j ) AND ASSIGN IT TO a
      FIND THE MINIMUM (n-1-i) < (n-1-j) AND ASSIGN IT TO b
      THEN ASSIGN THE LEAST VALUE FROM a AND b TO x
      IF i <= j THEN,
         PRINT THE VALUE OF 2* ((n-2*x)*(n-2*x) - (i-x) - (j-x))
      ELSE
         PRINT THE VALUE OF 2*((n-2*x-2)*(n-2*x2) + (i-x) + (j-x))
   END LOOP
   PRINT NEWLINE
END LOOP
STOP
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal