quería preguntar si había algo de algoritmo listo, eso me permitió hacer esto: tengo una matriz m (col) x n (fila) con m x n elementos. Quiero dar posición a este elemento a partir del centro y que gira como una espiral, por ejemplo, para un 3x3 matriz tengo 9 elementos así definidos:Matriz y algoritmo "espiral"
5 6 7
4 9 8
3 2 1
o para matriz Una 4 x 3 tengo 12 elementos, hacer definido:
8 9 10 1
7 12 11 2
6 5 4 3
o de nuevo, un 5x2 matriz tengo 10 elementos así definidos:
3 4
7 8
10 9
6 5
2 1
etc. he resuelto básicamente la definición de un conjunto de número entero de elemen mxn ts y cargar manualmente el valor, pero en generel para mí como esa matriz hecha de algoritmo de forma automática. Gracias a quien me puede ayudar a encontrar algo así, muchas gracias.
ACTUALIZACIÓN
Este código, hago exactely acerca quiero tener, pero no está en Delphi; solo necesito que empiece desde 1 y no desde 0. Lo importante para mí es que es válido para cualquier matriz m x n. ¿Quién me ayudó a traducirlo en Delphi?
(defun spiral (rows columns)
(do ((N (* rows columns))
(spiral (make-array (list rows columns) :initial-element nil))
(dx 1) (dy 0) (x 0) (y 0)
(i 0 (1+ i)))
((= i N) spiral)
(setf (aref spiral y x) i)
(let ((nx (+ x dx)) (ny (+ y dy)))
(cond
((and (< -1 nx columns)
(< -1 ny rows)
(null (aref spiral ny nx)))
(setf x nx
y ny))
(t (psetf dx (- dy)
dy dx)
(setf x (+ x dx)
y (+ y dy)))))))
> (pprint (spiral 6 6))
#2A ((0 1 2 3 4 5)
(19 20 21 22 23 6)
(18 31 32 33 24 7)
(17 30 35 34 25 8)
(16 29 28 27 26 9)
(15 14 13 12 11 10))
> (pprint (spiral 5 3))
#2A ((0 1 2)
(11 12 3)
(10 13 4)
(9 14 5)
(8 7 6))
Gracias otra vez mucho.
Su algoritmo aún no está bien definido en mi opinión. Esperaba que la matriz 5x2 fuera ((6 7) (5 8) (4 9) (3 10) (2 1)). –
Estoy con David. ¿Y por qué comienzo en diferentes lugares? Debería ser el mismo rincón todo el tiempo. –
¡Lo único claro es que parece proceder en el sentido de las agujas del reloj! ¿Puedes decir un uso concreto del algoritmo? – menjaraz