Matrice serpentine PTA (matrice carrée en spirale)

Matrice serpentine PTA (matrice carrée en spirale)

Matrice carrée en spirale (20 points) La
soi-disant «matrice carrée en spirale» signifie que pour tout N donné, commencez à partir de la première grille dans le coin supérieur gauche de 1 à N × N, et remplissez N × dans le sens de la spirale La phalange de N. Cette question nécessite la construction d'une telle matrice en spirale carrée.

Format d'entrée:
saisissez un entier positif N (<10) sur une ligne.

Format de
sortie : sortie matrice carrée spirale N × N. Il y a N numéros dans chaque ligne et chaque numéro occupe 3 chiffres.

Exemple d'entrée:
5
Exemple de sortie:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

Idées

Très simple, supposons n = 3; pour obtenir une telle matrice serpentine

  1  2  3
  8  9  4
  7  6  5

Remplissez séquentiellement à partir de 1. Supposons que les coordonnées du "stylo" soient (x, y), puis au début x = 0, y = n-1, c'est-à-dire la 0ème ligne et la 0ème colonne (la plage de lignes et de colonnes est 0 ~ n -1, il n'y a pas de nième colonne). La piste de mouvement du "stylo" est: droite, droite, droite, bas, bas, gauche, gauche, haut et droite. Bref, d'abord à droite, jusqu'à ce qu'il ne puisse pas être rempli, puis en bas, puis à gauche, et enfin en haut. «Impossible de remplir» signifie sortir à nouveau des limites (par exemple, 5 → 6), ou aller à la grille précédemment remplie (par exemple, 8 → 9).

Si toutes les grilles sont initialisées à 0, cela peut être facilement jugé. À ce stade, memset () est utilisé; le fichier d'en-tête de cette fonction est <string.h>.

#include<stdio.h>
#include<string.h>
#define maxn 20
int a[maxn][maxn];
int main()
{
    
    
int n, x, y, tot = 0;
scanf("%d", &n);
memset(a, 0, sizeof(a));
tot = a[x=0][y=0] = 1;
while(tot < n*n)
{
    
    
while(y+1<n && !a[x][y+1]) a[x][++y] = ++tot;
while(x+1<n && !a[x+1][y]) a[++x][y] = ++tot;
while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++tot;
while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++tot;

}
for(x = 0; x < n; x++)
{
    
    
for(y = 0; y < n; y++) printf("%3d", a[x][y]);
printf("\n");
}
return 0;
}

Si vous entrez 6, vous obtiendrez une telle matrice en spirale;

Je suppose que tu aimes

Origine blog.csdn.net/Potestatem/article/details/115014187
conseillé
Classement