Přejít na hlavní obsah

Jak odvodit pole ve spirále: algoritmy a příklady kódu

K vyřešení tohoto problému lze použít následující algoritmus:

  1. Inicializovat čtyři proměnné: horní hranice, dolní hranice, levá hranice a pravá hranice, které ukazují na hranice matice.
  2. Inicializovat proměnné: směr (počáteční směr – doprava) a čítač (počáteční hodnota je 1).
  3. Spustit cyklus, který bude proveden, dokud jsou hodnoty horní hranice a levé hranice menší nebo rovny spodní a pravé hranici.
  4. Vyveďte všechny prvky horní hranice (od levé k pravé hranici) a zvyšte hodnotu horní hranice.
  5. Zvětšit pult.
  6. Odstranit všechny prvky pravé hranice (od horní k dolní hranici) a snížit hodnotu pravé hranice.
  7. Zvětšit pult.
  8. Odstraňte všechny prvky spodní hranice (vpravo až vlevo) a snižte hodnotu spodní hranice.
  9. Zvětšit pult.
  10. Vyveďte všechny prvky levé hranice (od spodní k horní hranici) a zvyšte hodnotu levé hranice.
  11. Zvětšit pult.
  12. Opakujte kroky 4-11, dokud nebudou vyvedeny všechny prvky pole.

Pomocí tohoto algoritmu je tedy možné efektivně odvodit pole ve spirále.

Řekněme, že máme další pole:

1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
1 2 3
5
7 8 9
1 2 3
5
7 8 9

Tímto způsobem získáme hledaný spirálový tvar pole 3x3.

[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]]
function printSpiral(matrix) topRow++;for (let i = topRow; i rightColumn--;if (topRow = leftColumn; i--) bottomRow--;>if (leftColumn = topRow; i--) leftColumn++;>>return result;>let matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]];let spiral = printSpiral(matrix);console.log(spiral);

V důsledku provádění tohoto kódu bude do konzole vyvedeno pole obsahující prvky zdrojového pole vyšlechtěné ve spirále:

[1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10]

Tímto způsobem jsme pomocí této funkce úspěšně vyvedli pole 4x4 ve spirále.

def print_spiral(matrix):row_start = 0row_end = len(matrix) - 1col_start = 0col_end = len(matrix[0]) - 1while row_start 

V důsledku provedení tohoto příkladu bude odvozena následující posloupnost čísel: 1, 2, 3, 6, 9, 8, 7, 4, 5.