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).