Fortune base gauche droit sujet class3- 6 matrice de rotation carrée

Fortune base gauche droit sujet class3- 6 matrice de rotation carrée

1. sujet

[Titre] Etant donné une matrice entière matrice carrée, la matrice est ajustée pour que la
rotation dans le sens horaire de 90 degrés similaires.
[] Requis complexité de l' espace supplémentaire est O (1), sans l' aide d' un réseau auxiliaire.

Insérer ici l'image Description

2. Analyse

Analyse: Titre matrice carrée donnée, examiner la structure de l'arrière de la matrice de forme de manière à être mis en rotation par couche de l' extérieur vers l' intérieur, après la première couche extérieure. La pensée du même sujet 5 avec les coins gauche et droit d'un point prédéterminé (a, b) (c, d). Parce que vous ne pouvez pas utiliser un tableau auxiliaire, le nombre de rotation du couvercle avant qu'il a besoin d' une mise en scène variable temporaire d'un nombre.
(1) Après un numéro temporaire par a, b, c, d des quatre variables 1,4,16,13 quatre écrase le comptage précédent par une dans l'ordre des flèches noires;
(2) une paire de rangées 2,8,15,9 direction et pour séquentiellement (1) une étape similaire à revêtement par centrifugation, 3,12,14,5, aussi, de sorte que le nombre de rotation de la couche extérieure 12 est terminée,
une ++, B ++, la C- (3). , de même pour la couche intérieure 6,7,11,10 d-.
Conseils : chaque numéro de ligne de la plus extérieure 4, il y a trois commencent 1,2,3, deux par deux lignes ne constitue qu'un point de départ pour la couche interne 6, alors le nombre représente le point de départ nécessaire db- à -dire la quantité de chaque cycle fois. L'extérieur du titre 12 peut tourner trois fois le nombre de cycles, le nombre de cycles une fois les quatre intérieure.

Insérer ici l'image Description

3. code de base

(1) initialise a, b, c, d.

int a = 0,b = 0,c = height - 1,d = width - 1;

(2) faire tourner chaque code, par la position i et a, b, c, d de la matrice de contrôle, la capacité simple à inspecter le code

void rotate_matrix(int arr[][width],int a,int b,int c,int d)
{
	int times = d - b;
		for(int i = 0;i < times;i++)
		{
			int temp = arr[a][b + i];
			arr[a][b + i] = arr[c - i][b];
			arr[c - i][b] = arr[c][d - i];
			arr[c][d - i] = arr[a + i][d];
			arr[a + i][d] = temp;
		}
}

(3) le nombre total de couches nécessaires pour contrôler la rotation par un, deux variables c. Gauche et droite aux coins de chaque point d'une grille après rotation progressivement se déplace vers le centre, parce que le sujet est donnée à un carré, puis les deux points coïncident seulement mal possible en nutation abscisse deux points a, c contrôler la couche de rotation nombre.

while(a < c)
	{
		rotate_matrix(arr,a++,b++,c--,d--);
	}

4. Le code complet

#include<iostream>
#define height 4
#define width 4
using namespace std;

void rotate_matrix(int arr[][width],int a,int b,int c,int d)
{
	int times = d - b;
		for(int i = 0;i < times;i++)
		{
			int temp = arr[a][b + i];
			arr[a][b + i] = arr[c - i][b];
			arr[c - i][b] = arr[c][d - i];
			arr[c][d - i] = arr[a + i][d];
			arr[a + i][d] = temp;
		}
}

void print(int arr[][width])
{
	//打印输出
	for(int i = 0;i < height;i++)
	{
		for(int j = 0;j < width;j++)
		{
			cout<<arr[i][j]<<" " ;
		}
		cout<<endl;
	}
}
int main()
{
	//int arr[height][width] = {1,2,3,4,5,6,7,8,9};
	int arr[height][width] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
	int a = 0,b = 0,c = height - 1,d = width - 1;
	
	while(a < c)
	{
		rotate_matrix(arr,a++,b++,c--,d--);
	}
	print(arr);

 	system("pause");
	return 0;
}

5. La sortie

Insérer ici l'image Description

Publié 51 articles originaux · a gagné les éloges 1 · views 1387

Je suppose que tu aimes

Origine blog.csdn.net/shi_xiao_xuan/article/details/103660593
conseillé
Classement