Matrici și algoritmi comuni

Citire

De obicei, atunci când trebuie să citim o matrice vom primi mai întâi ca input un n și un m, reprezentând numărul de linii, respectiv cel de coloane.

Exemplu

#include <iostream>
using namespace std;

int n, m;
int mat[505][505];

int main() {
    cin >> n >> m;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> mat[i][j];
        }
    }

    return 0;
}

Parcurgerea matricilor

Unele probleme pot necesita parcurgerea matricilor în diferite forme.

Parcurgerea tuturor elementelor

Indexat de la 0

for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        int x = mat[i][j];
    }
}

Parcurgerea diagonalei principale

Indexat de la 0

for (int i = 0; i < n; i++) {
    int x = mat[i][i];
}

Parcurgerea diagonalei secundare

Indexat de la 0

for (int i = 0; i < n; i++) {
    int x = mat[i][n - i - 1];
}

Parcurgerea elementelor de deasupra diagonalei principale

Indexat de la 0

for (int i = 0; i < n; i++) {
    for (int j = i; j < n; j++) {
        int x = mat[i][j];
    }
}

Parcurgerea elementelor de deasupra diagonalei secundare

Indexat de la 0

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n - i; j++) {
        int x = mat[i][j];
    }
}

Parcurgerea elementelor de sub diagonala principale

Indexat de la 0

for (int i = 0; i < n; i++) {
    for (int j = 0; j < i + 1; j++) {
        int x = mat[i][j];
    }
}

Parcurgerea elementelor de sub diagonala secundara

Indexat de la 0

for (int i = 0; i < n; i++) {
    for (int j = i; j >= 0; j--) {
        int x = mat[i][n - j - 1];
    }
}

Parcurgerea elementelor în spirala

Link util

Indexat de la 1

for (int k = 1; k <= n / 2; k++) {
    for (int j = k; j <= n - k + 1; j++) {
        int x = a[k][j];
    }
    for (int i = k + 1; i <= n - k + 1; i++) {
        int x = a[i][n - k + 1];
    }
    for (int j = n - k; j >= k; j--) {
        int x = a[n - k + 1][j];
    }
    for (int i = n - k; i > k; i--) {
        int x = a[i][k];
    }   
}