Camino de máxima suma en una matriz

Los caminos desde el extremo superior izquierdo (posición (1,1)) hasta el extremo inferior derecho (posición (3,4)) en la matriz

moviéndose en cada paso una casilla hacia abajo o hacia la derecha, son los siguientes:

Las sumas de los caminos son 32, 41, 36, 40, 40, 35, 39, 34, 38 y 37, respectivamente. El camino de máxima suma es el segundo (1, 7, 12, 8, 4, 9) que tiene una suma de 41.

Definir la función

tal que (caminoMaxSuma m) es un camino de máxima suma en la matriz m desde el extremo superior izquierdo hasta el extremo inferior derecho, moviéndose en cada paso una casilla hacia abajo o hacia la derecha. Por ejemplo,

Soluciones

Pensamiento

Caminante, no hay camino,
sino estelas en la mar.

Antonio Machado

3 Comentarios

  1. </pre lang=»haskell»>
    import Data.Matrix
    caminoMaxSuma :: Matrix Int -> [Int]
    caminoMaxSuma m = (m ! (1,1)) : aux m (1,1)
    where aux m (i,j) | j== ncols m = [ m ! (k,j) | k <- [i+1..(nrows m)]]
    | i== nrows m = [ m ! (i,k) | k (m ! (i,j+1)) = (m ! (i+1,j)):aux m (i+1,j)
    | otherwise = (m ! (i,j+1)):aux m (i,j+1)

    –Calcula el ultimo ejemplo sin problemas
    –sum (caminoMaxSuma (fromList 800 800 [1..]))
    –766721999
    –(0.08 secs, 57,475,224 bytes)

Leave a Reply to luipromorCancel reply