Si je comprends bien le problème (et je ne peux pas, n'hésitez pas à me dire si je ne le fais pas) vous voulez transformer une grille 2D en un tableau 1D trié, alors que chaque ligne et colonne est déjà triée dans la grille 2D?
Dans ce cas, le premier élément de la liste doit être le coin supérieur gauche ((0,0), par définition du problème). Après cela, il doit s'agir de l'élément (1,0) ou (0,1), car tous les autres seront plus grands que ceux-ci par définition.
Vous pouvez généraliser en disant que le plus petit élément suivant de la grille est toujours directement sous un élément déjà utilisé (ou le bord de la grille), et également à droite d'un élément déjà utilisé (ou le bord de la grille), car les deux sont défini pour être plus petit que lui. Ainsi, à chaque itération, vous ne devez considérer que la plus petite valeur qui remplit cette exigence.
Vous pouvez conserver les candidats possibles dans l'ordre trié au fur et à mesure que vous les trouvez (pas plus de deux ne seront jamais disponibles en une seule itération), et à chaque itération, vérifiez les nouvelles valeurs mises à disposition (le cas échéant). S'ils sont inférieurs au plus bas des candidats précédents, ajoutez-les immédiatement à la liste et répétez, sinon ajoutez le plus bas candidat précédent et comparez-le au plus bas suivant, etc.
Malheureusement, je ne prétends pas être en mesure de fournir une complexité exacte de cela, ni je prétends que c'est la plus efficace possible, cela semble certainement mieux qu'une approche naïve, et j'espère que je l'ai suffisamment expliquée pour que vous puissiez comprendre.
EDIT: Pour les nd grilles comme celle-ci, je crois que le même principe de base s'applique, mais chaque itération rend jusqu'à n nouveaux candidats disponibles, et ces candidats doivent être les plus petits éléments inutilisés dans chacune des n dimensions à ce stade.