Nếu tôi hiểu chính xác vấn đề (và tôi có thể không, vui lòng cho tôi biết nếu tôi không) bạn muốn chuyển đổi lưới 2D thành mảng 1D được sắp xếp, trong khi mỗi hàng và cột đã được sắp xếp trong lưới 2D?
Phần tử đầu tiên trong danh sách trong trường hợp này phải là góc trên cùng bên trái ((0,0), theo định nghĩa của vấn đề). Sau đó, nó phải là phần tử (1,0) hoặc (0,1), vì tất cả các phần tử khác sẽ lớn hơn các phần tử này theo định nghĩa.
Bạn có thể khái quát bằng cách nói rằng phần tử nhỏ nhất tiếp theo trong lưới luôn nằm ngay bên dưới phần tử đã được sử dụng (hoặc cạnh của lưới) và bên phải của phần tử đã được sử dụng (hoặc cạnh của lưới), vì cả hai phần tử đều được sử dụng được định nghĩa là nhỏ hơn nó. Vì vậy, ở mỗi lần lặp, bạn chỉ phải xem xét giá trị nhỏ nhất đáp ứng yêu cầu này.
Bạn có thể giữ các ứng viên có thể theo thứ tự được sắp xếp khi bạn tìm thấy chúng (không quá hai sẽ có sẵn trong một lần lặp) và tại mỗi lần lặp, hãy kiểm tra các giá trị mới có sẵn (nếu có). Nếu họ thấp hơn mức thấp nhất của các ứng cử viên trước, hãy thêm họ vào danh sách ngay lập tức và lặp lại, nếu không hãy thêm ứng viên thấp nhất trước đó và so sánh với mức thấp nhất tiếp theo, v.v.
Thật không may, tôi không tuyên bố rằng nó có thể cung cấp một sự phức tạp chính xác của điều này, tôi cũng không cho rằng nó hiệu quả nhất có thể, nó chắc chắn có vẻ tốt hơn một cách tiếp cận ngây thơ, và tôi hy vọng tôi đã giải thích nó đủ để bạn hiểu.
EDIT: Đối với các lưới thứ hai như thế này, tôi tin rằng nguyên tắc cơ bản tương tự được áp dụng, nhưng mỗi lần lặp lại tạo ra n ứng cử viên mới và các ứng cử viên này phải là các yếu tố không sử dụng nhỏ nhất trong mỗi chiều thứ n tại thời điểm này.