Chúng ta đều đã nghe nói về câu đố Tour của Hiệp sĩ : tìm một tuyến đường cho một hiệp sĩ đi qua tất cả các ô vuông trên bàn cờ. Nhưng hãy thành thật mà nói, nó hơi nhàm chán. Vì vậy, hãy cho hiệp sĩ một chút thử thách.
Bài tập
Viết một chương trình đưa hiệp sĩ đi qua tất cả các ô vuông trên một bàn cờ có kích thước tùy ý, tùy ý. Nó sẽ lấy bàn cờ làm đầu vào và đầu ra tập hợp các nước đi và vị trí bắt đầu. Trong trường hợp có một bảng không thể, nó sẽ xuất ra tập hợp các bước di chuyển và vị trí bắt đầu cho một chuyến tham quan với độ dài dài nhất có thể. Lưu ý: hiệp sĩ không cần phải đi một vòng; giả sử anh ta có một cách khác để về nhà.
Các quân cờ là nhỏ, vì vậy mã của bạn cần phải đủ nhỏ để các hiệp sĩ mang theo.
Đầu vào
Đầu vào sẽ là một đại diện dựa trên chuỗi hoặc dựa trên mảng của bàn cờ, trong đó giá trị không trống / trung thực là một hình vuông và giá trị trống / giả là một khoảng trống. Để đơn giản, tôi sẽ sử dụng #
s và s được sắp xếp trong một lưới cho các ví dụ.
Đầu ra
Đầu ra sẽ là hai số nguyên lớn, theo sau là một loạt các số nguyên 4 bit hoặc tương đương với ngôn ngữ của bạn. Hai số nguyên lớn sẽ đại diện cho tọa độ bắt đầu và các số sau sẽ đại diện cho một di chuyển như vậy:
7 0
6 1
K
5 2
4 3
nơi K
là vị trí trước khi di chuyển, và số lượng là vị trí sau khi di chuyển.
Ví dụ
Vì có rất nhiều giải pháp khả thi cho câu đố Tour của Hiệp sĩ, tôi sẽ chỉ cung cấp các kết quả đầu ra mẫu. Có thể có nhiều đầu ra hơn.
###
# #
###
0 0 3 0 5 2 7 4 1
Thử thách mới: Đưa ra nhiều ví dụ