Un programma c per attraversare una matrice * n

Abbiamo una matrice * n per esempio prendiamo n = 4 e la matrice è data sotto.

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

Dobbiamo attraversarlo nella sequenza:

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

Come posso fare questo?

“Attraversare” in questo caso significa probabilmente accedere e stampare ogni voce. Si desidera attraversarlo in una spirale in senso orario, partendo dall’alto.

Ecco una descrizione in stile frase inglese di ciò che devi fare:

Se riesci a trovare un modo per andare all’elemento TOP-LEFT di una sottomatrice, leggi le voci nella riga superiore da sinistra a destra, leggi le voci nella colonna destra dall’alto verso il basso, le voci in la riga in basso da destra a sinistra e quindi la colonna di sinistra in basso a destra, si ha una iterazione. Puoi prendere la sottomatrice rimanente e continuare finché non hai più niente.

Ulteriori suggerimenti:

Dalla cella M [x] [y],

  • M [x] [y + 1] è la cella a DESTRA (a condizione che y + 1
  • M [x] [y-1] è la cella a SINISTRA (fintanto che y> 0)
  • M [x + 1] [y] è la cella SOTTO (fintanto che x + 1
  • M [x-1] [y] è la cella SOPRA (purché x> 0)

Prima di tutto, cerca di trovare un tipo appropriato per modellare la tua matrice, in modo che sia facile lavorarci sopra. Come minimo, dovrebbe essere un tipo che consente di accedere agli elementi nella matrice per il loro numero di riga / colonna, in modo da poter accedere sostanzialmente all’elemento nella riga i e alla colonna j della matrice m simile a m(i, j)

Supponendo che tu abbia trovato un tipo simile, nota che ti viene chiesto di ripetere la matrice in modo spirale (in senso orario). Quindi qui c’è una ripetizione: ogni giro della spirale è molto simile agli altri, tranne che le spirali interne sono un po ‘più piccole; infatti, ogni spirale è più piccola della precedente di una quantità costante.