De ce contează?
Citești un clasament pe coloane: parcurgi toată coloana „nume”, apoi toată coloana „punctaj”. Mergi de sus în jos pe fiecare coloană, nu de la stânga la dreapta pe rânduri. Asta e parcurgerea pe coloane a unei matrice.
Ce înseamnă parcurgerea pe coloane
A parcurge pe coloane înseamnă: iei coloana 0 în întregime (toate liniile, de sus în jos), apoi coloana 1, și așa mai departe.
Diferența față de parcurgerea pe linii e doar ordinea buclelor: aici bucla exterioară e pe coloane (j), cea interioară pe linii (i). Accesul la element rămâne tot a[i][j].
Aceeași matrice, alt traseu. Pe linii „se mișcă repede” coloana; pe coloane „se mișcă repede” linia. Doar inversezi care buclă e exterioară.
Exemplu: suma fiecărei coloane
Fie matricea a (3 linii, 3 coloane):
| L0 | 2 | 5 | 1 |
| L1 | 4 | 0 | 6 |
| L2 | 3 | 3 | 3 |
Pentru fiecare coloană resetezi suma și aduni de sus în jos:
coloana 0: 2+4+3 = 9
coloana 1: 5+0+3 = 8
coloana 2: 1+6+3 = 10Implementare C++
#include <iostream>
using namespace std;
int a[100][100];
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> a[i][j];
for (int j = 0; j < m; j++) { // bucla exterioara: coloana
int suma = 0; // reset pentru fiecare coloana
for (int i = 0; i < n; i++) // bucla interioara: liniile
suma += a[i][j];
cout << "Suma coloanei " << j << " = " << suma << "\n";
}
return 0;
}
// pentru matricea de mai sus: 9, 8, 10Singura schimbare față de parcurgerea pe linii: j e acum exterior, i interior. Indexarea a[i][j] nu se schimbă.
Complexitate
| Operație | Timp | Spațiu |
|---|---|---|
| Parcurgere pe coloane | O(n·m) | O(1) suplimentar |
Același cost ca pe linii — atingi tot atâtea elemente, doar în altă ordine.
Vizualizare
Urmărește cum se parcurge fiecare coloană de sus în jos, înainte de a trece la următoarea:
Greșeli frecvente de concurs:
- Greșești limita buclei interioare. Pe coloane, bucla interioară merge pe linii (
i < n). Folosirea luimaici e o eroare clasică (mai ales cândn ≠ m). - Crezi că trebuie să transpui matricea. Nu — parcurgerea pe coloane e doar inversarea buclelor. Transpunerea e altă operație (creezi o matrice nouă).
- Reset în locul greșit.
suma = 0se pune la începutul fiecărei coloane (în bucla pej), nu o singură dată. - Confunzi
a[i][j]cua[j][i]. Indexarea rămâne linie-întâi:a[i][j]. Doar ordinea buclelor se schimbă, nu accesul.
Recapitulare
- Parcurgerea pe coloane = bucla exterioară pe
j(coloană), interioară pei(linie), de sus în jos. - Diferă de cea pe linii doar prin ordinea buclelor; accesul rămâne
a[i][j]. - Cost O(n·m); atenție ca bucla interioară să meargă până la
n(linii), num.