Ok, c'est bien faisable en O(n), marrant.
Par contre pour que ça marche, je pense qu'il faut que les bords et les coins de la matrice comptent aussi comme des maximums locaux.
Ça fait un peu penser à l'algorithme du gradient ( https://fr.wikipedia.org/rg/wiki/Algorithme_du_gradient ), où on veut minimiser une fonction et pour ça on part d'un point quelconque et on descend toujours vers la direction de pente maximale.
Là imaginons qu'on parte du coin et qu'on se déplace toujours vers le voisin de valeur maximale, ça marche pas parce qu'on peut se retrouver à devoir se balader un peu partout dans la matrice :
1 2 3 4 5
0 0 0 0 6
15 16 17 0 7
14 0 0 0 8
13 12 11 10 9
L'astuce c'est, avant d'entamer la montée, de réussir à se créer des « barrières » pour diviser la matrice en 4 zones dont on ne pourra pas sortir.
T'as demandé "juste des idées, pas la réponse", alors je m'arrête là pour l'instant 