Якщо я правильно розумію проблему (а я цього не можу, не соромтеся сказати мені, якщо я цього не робите), ви хочете перетворити 2D сітку в відсортований 1D масив, тоді як кожен рядок і стовпець вже відсортовані в 2D сітці?
Першим елементом у списку в цьому випадку повинен бути верхній лівий кут ((0,0) за визначенням проблеми). Після цього він повинен бути або (1,0), або (0,1), оскільки всі інші будуть більшими за них за визначенням.
Ви можете узагальнити, сказавши, що наступний найменший елемент в сітці завжди знаходиться безпосередньо під уже використаним елементом (або краєм сітки), а також праворуч від елемента, який вже використовується (або краю сітки), оскільки обидва є визначено меншим за нього. Тож при кожній ітерації ви повинні враховувати лише найменше значення, яке відповідає цій вимозі.
Ви можете зберігати можливих кандидатів у відсортованому порядку у міру їх знаходження (не більше двох буде надано за одну ітерацію), і на кожній ітерації перевіряйте нові доступні значення (якщо такі є). Якщо вони нижчі за найнижчих кандидатів, додайте їх до списку відразу та повторіть, інакше додайте найнижчого попереднього кандидата та порівняйте із наступним найнижчим тощо.
На жаль, я не стверджую, що зможу надати точну складність цього, і не вважаю, що це найефективніше, але це, здається, краще, ніж наївний підхід, і я сподіваюся, що я пояснив це досить добре, щоб ви зрозуміли.
EDIT: Для таких сіток, як я вважаю, застосовується той самий основний принцип, але кожна ітерація складає до n нових кандидатів, і ці кандидати повинні бути найменшими невикористаними елементами у кожному з n вимірів у цей момент.