Witam
W jaki sposób można zrobić przesunięcie zawartości tablicy w danym kierunku, tak żeby nowe elementy zostały pobrane z innej tablicy, a następnie te elementy które zostaną usunięte z obecnej tablicy były przeniesione do drugiej tablicy?

Przykład:

T1:
0 1 2
3 4 5
6 7 8

T2:
1 2 3 4 5 

Przesunięcie.x = 1
Przesunięcie.y = 1

T1 po wykonaniu przesunięcia:
1 2 3
1 2 4
4 5 5

T2 po wykonaniu przesunięcia:
0 3 6 7 8

Tablica T1 jest o wymiarach NxN, tablica T2 jest o wymiarach N+N-1.
Udało mi się zrobić to dla tablicy 3x3 jednak nie mam pomysłu na wykonanie tego dla tablicy NxN.

		for (short int TB_01 = 0; TB_01 < 5; TB_01++){

			if (TB_01 == 0){ TB[0] = -TR[0]; TB[1] = TR[1]; }
			if (TB_01 == 1){ TB[0] = 0; TB[1] = TR[1]; TB[2] = TR[0]; TB[3] = 0; }
			if (TB_01 == 2){ TB[0] = TR[0]; TB[1] = TR[1]; }
			if (TB_01 == 3){ TB[0] = TR[0]; TB[1] = 0; TB[2] = 0; TB[3] = TR[1]; }
			if (TB_01 == 4){ TB[0] = TR[0]; TB[1] = -TR[1]; }

			if (TB_01 == 0 || TB_01 == 4){

				GenSP ((*Tb).Ub[TB_01], Ub[TB[0] + 1][TB[1] + 1]);

			}
			
			if (TB_01 == 1 || TB_01 == 3){ 
					
				GenSP ((*Tb).Ub[TB_01], Ub[-TB[2] + 1][-TB[3] + 1]);		
				GenSP (Ub[-TB[2] + 1][-TB[3] + 1], Ub[TB[0] + 1][TB[1] + 1]);

			}
	
			if (TB_01 == 2){ 
					
				GenSP ((*Tb).Ub[TB_01], Ub[-TB[0] + 1][-TB[1] + 1]);			
				GenSP (Ub[-TB[0] + 1][-TB[1] + 1], Ub[1][1]);
				GenSP (Ub[1][1], Ub[TB[0] + 1][TB[1] + 1]);

			}

		}

GenSP - Funkcja zamieniająca dwa elementy, odpowiednik .swap
TR[0] - przesunięcie w osi X, wartość 1 lub -1
TR[1] - przesunięcie w osi Y, wartość 1 lub -1

Najprostszą opcją jest rozłożenie tej operacji na dwie, najpierw w osi X, a następnie w osi Y, jednak ta metoda pochłonęłaby więcej pamięci (jeden element tablicy to 16-30 mb).

user image