Maison  >  Article  >  développement back-end  >  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)

WBOY
WBOYavant
2023-09-06 11:53:08788parcourir

É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

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

pour la moitié supérieure droite,
mat[i][j] = (n-2*x)*(n-2*x)-(i-x)-(j-x)

pour la moitié inférieure gauche,

mat[i][j] = (n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)

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

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer