Jika saya memahami masalahnya dengan benar (dan saya mungkin tidak, jangan ragu untuk memberi tahu saya jika saya tidak) Anda ingin mengubah grid 2D menjadi array 1D yang diurutkan, sedangkan setiap baris dan kolom sudah diurutkan dalam grid 2D?
Elemen pertama dalam daftar dalam kasus ini harus sudut kiri atas ((0,0), dengan definisi masalah). Setelah ini, ia harus menjadi elemen (1,0) atau (0,1), karena semua yang lain akan lebih besar dari ini menurut definisi.
Anda dapat menggeneralisasi dengan mengatakan bahwa elemen terkecil berikutnya dalam kisi selalu langsung di bawah elemen yang sudah digunakan (atau tepi kisi), dan juga di sebelah kanan elemen yang sudah digunakan (atau tepi kisi), karena keduanya didefinisikan lebih kecil dari itu. Jadi pada setiap iterasi Anda hanya harus mempertimbangkan nilai terkecil yang memenuhi persyaratan ini.
Anda dapat menyimpan kandidat yang mungkin dalam urutan diurutkan saat Anda menemukannya (tidak lebih dari dua akan tersedia dalam satu iterasi), dan pada setiap iterasi periksa nilai-nilai baru yang disediakan (jika ada). Jika mereka lebih rendah dari yang terendah dari kandidat sebelumnya, tambahkan langsung ke daftar dan ulangi, jika tidak tambahkan kandidat sebelumnya yang terendah dan bandingkan dengan yang terendah berikutnya dll.
Sayangnya saya tidak mengklaim dapat memberikan kompleksitas yang tepat dari ini, saya juga tidak mengklaim itu adalah yang paling efisien, itu tampaknya lebih baik daripada pendekatan naif, dan saya harap saya menjelaskannya dengan cukup baik untuk Anda mengerti.
EDIT: Untuk grid nd seperti ini saya percaya prinsip dasar yang sama berlaku, tetapi setiap iterasi membuat hingga n kandidat baru yang tersedia, dan kandidat ini harus menjadi elemen terkecil yang tidak digunakan dalam setiap n dimensi pada saat ini.