Come visualizzare una matrice a spirale interna

0

Supponiamo di avere la seguente matrice con i valori 1-25 come input per il mio programma.

 1  2  3  4  5
 6  7  8  9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

La spirale verso l'interno dovrebbe darmi l'output 13 18 17 12 7 8 9 14 19 24 23 22 21 16 11 6 1 2 3 4 5 10 15 20 25 . Quale potrebbe essere la logica dietro questo programma? Ho provato a iniziare con il centro della matrice e poi aumentare la riga e la colonna per essere attraversato ad ogni iterazione, ma sono piuttosto bloccato qui.

    
posta GermanShepherd 06.03.2015 - 03:42
fonte

1 risposta

4

La parte che viene ripetuta è questo schema "quadrato" (leggi questo da a a p ):

h i j k l
g       m
f       n
e       o
d c b a p

(Qui ho mostrato un loop quadrato di larghezza 5.)

Il nucleo della soluzione sta nel capire come descrivere questo schema a livello di codice. Questo stesso è composto da 4 strisce che si differenziano nel punto di partenza e incremento:% da% da% a%% da%,% da% da% a% da%,% da% da% a% da% e% da% da% a% da%. In questo esempio, la striscia da a a d ha il punto di partenza e e l'incremento h . Le altre strisce sono analoghe.

La soluzione completa prevede la ripetizione di questo modello con dimensioni crescenti fino a coprire l'intero quadrato. Si inizia con il pezzo centrale, seguito da un anello quadrato di larghezza 3, seguito da un altro anello quadrato di larghezza 5, ecc.

A seconda del sistema di coordinate che usi, potresti dover gestire un certo offset che dipende dalla dimensione della griglia completa.

    
risposta data 06.03.2015 - 04:17
fonte

Leggi altre domande sui tag