Thuật toán khắc đường may, hoặc một phiên bản phức tạp hơn của nó, được sử dụng để thay đổi kích thước hình ảnh nhận biết nội dung trong các chương trình và thư viện đồ họa khác nhau. Hãy chơi gôn nào!
Đầu vào của bạn sẽ là một mảng số nguyên hai chiều hình chữ nhật.
Đầu ra của bạn sẽ là cùng một mảng, hẹp hơn một cột, với một mục được xóa khỏi mỗi hàng, các mục đó biểu thị một đường dẫn từ trên xuống dưới với tổng thấp nhất của tất cả các đường dẫn đó.
https://en.wikipedia.org/wiki/Seam_carving
Trong hình minh họa ở trên, giá trị của mỗi ô được hiển thị bằng màu đỏ. Các số màu đen là tổng của giá trị của một ô và số màu đen thấp nhất trong một trong ba ô phía trên nó (được chỉ bởi các mũi tên màu xanh lá cây). Các đường dẫn được tô sáng màu trắng là hai đường dẫn tổng thấp nhất, cả hai đều có tổng bằng 5 (1 + 2 + 2 và 2 + 2 + 1).
Trong trường hợp có hai đường dẫn được buộc với tổng thấp nhất, việc bạn loại bỏ không thành vấn đề.
Đầu vào nên được lấy từ stdin hoặc như một tham số chức năng. Nó có thể được định dạng theo cách thuận tiện cho ngôn ngữ bạn chọn, bao gồm dấu ngoặc và / hoặc dấu phân cách. Vui lòng xác định trong câu trả lời của bạn như thế nào đầu vào dự kiến.
Đầu ra phải xuất ra ở định dạng được phân tách rõ ràng hoặc dưới dạng giá trị trả về hàm trong ngôn ngữ của bạn tương đương với mảng 2d (có thể bao gồm các danh sách lồng nhau, v.v.).
Ví dụ:
Input:
1 4 3 5 2
3 2 5 2 3
5 2 4 2 1
Output:
4 3 5 2 1 4 3 5
3 5 2 3 or 3 2 5 3
5 4 2 1 5 2 4 2
Input:
1 2 3 4 5
Output:
2 3 4 5
Input:
1
2
3
Output:
(empty, null, a sentinel non-array value, a 0x3 array, or similar)
EDIT: Tất cả các số sẽ không âm và mọi đường may có thể sẽ có một tổng phù hợp với số nguyên 32 bit đã ký.