12 marzo 2025

Attraversamento della Matrice

L’attraversamento della matrice è un concetto fondamentale nell’informatica ed è ampiamente utilizzato in varie applicazioni, dalla elaborazione delle immagini alla teoria dei grafi. Attraversare una matrice in modo efficiente è cruciale per risolvere problemi che coinvolgono strutture dati basate su griglie. Questo articolo esplora diverse tecniche di attraversamento della matrice e le loro applicazioni.

Tipi di Attraversamento di Matrice

1. Attraversamento per Righe

Nell’attraversamento per righe, gli elementi della matrice vengono accessi riga per riga.

for (let i = 0; i < rows; i++) {
  for (let j = 0; j < cols; j++) {
    console.log(matrix[i][j] + " ");
  }
}

Esempio:

1 2 3
4 5 6
7 8 9

Output:

1 2 3 4 5 6 7 8 9

2. Attraversamento per Colonne

Nell’attraversamento per colonne, gli elementi della matrice vengono accessi colonna per colonna.

for (let j = 0; j < cols; j++) {
  for (let i = 0; i < rows; i++) {
    console.log(matrix[i][j] + " ");
  }
}

Esempio:

1 2 3
4 5 6
7 8 9

Output:

1 4 7 2 5 8 3 6 9

3. Attraversamento Diagonale

L’attraversamento diagonale accede agli elementi lungo le diagonali della matrice.

for (let d = 0; d < rows + cols - 1; d++) {
  for (let i = 0; i < rows; i++) {
    for (let j = 0; j < cols; j++) {
      if (i + j === d) {
        console.log(matrix[i][j] + " ");
      }
    }
  }
}

Output:

1 2 4 3 5 7 6 8 9

4. Attraversamento a Spirale

L’attraversamento a spirale percorre la matrice in un ordine a spirale, in senso orario o antiorario.

function spiralTraversal(matrix) {
  let result = [];
  while (matrix.length) {
    result = result.concat(matrix.shift());
    matrix.forEach((row) => result.push(row.pop()));
    matrix.reverse().forEach((row) => row.reverse());
  }
  return result;
}

Output:

1 2 3 6 9 8 7 4 5

5. Attraversamento a Zig-Zag

L’attraversamento a zig-zag percorre la matrice seguendo un modello ondulato diagonale.

function zigzagTraversal(matrix) {
  let rows = matrix.length;
  let cols = matrix[0].length;

  let result = [];
  let direction = 1;

  for (let i = 0; i < rows; i++) {
    for (let j = 0; j < cols; j++) {
      let index = direction > 0 ? j : cols - j - 1;
      result.push(matrix[i][index]);
    }
    direction *= -1;
  }

  return result;
}

Output:

1 2 3 6 5 4 7 8 9

Applicazioni della Traversata di Matrice