Se eu entendi o problema corretamente (e talvez não, sinta-se à vontade para me dizer se não o faz), você deseja transformar uma grade 2D em uma matriz 1D classificada, enquanto cada linha e coluna já está classificada na grade 2D?
O primeiro elemento da lista nesse caso deve ser o canto superior esquerdo ((0,0), por definição do problema). Depois disso, ele deve ser o elemento (1,0) ou (0,1), pois todos os outros serão maiores que estes por definição.
Você pode generalizar dizendo que o próximo elemento menor da grade está sempre diretamente abaixo de um elemento já usado (ou na borda da grade) e também à direita de um elemento já usado (ou na borda da grade), pois ambos são definido como menor que ele. Portanto, a cada iteração, você deve considerar apenas o menor valor que atenda a esse requisito.
Você pode manter os possíveis candidatos na ordem classificada conforme os encontra (nunca mais de dois serão disponibilizados em uma iteração) e, a cada iteração, verifique os novos valores disponibilizados (se houver). Se eles forem inferiores ao menor dos candidatos anteriores, adicione-os à lista imediatamente e repita; caso contrário, adicione o candidato anterior mais baixo e compare com o próximo mais baixo etc.
Infelizmente, não pretendo fornecer uma complexidade exata disso, nem reivindico que seja a mais eficiente possível, certamente parece melhor do que uma abordagem ingênua, e espero que tenha explicado bem o suficiente para você entender.
EDIT: Para nd grades como essa, acredito que o mesmo princípio básico se aplica, mas cada iteração disponibiliza até n novos candidatos disponíveis e esses candidatos devem ser os menores elementos não utilizados em cada uma das n dimensões neste momento.