Trước hết xin lỗi vì tiếng Anh của tôi.Backtracking in Erlang
Tôi muốn sử dụng thuật toán backtracking trong Erlang. Nó sẽ phục vụ như là một đoán để giải quyết một phần sudokus đầy. Một sudoku 9x9 được lưu trữ dưới dạng danh sách 81 phần tử, trong đó mọi phần tử lưu trữ số có thể có thể đi vào ô đó.
Đối với sudoku 4x4 giải pháp ban đầu của tôi trông giống như sau: [[1], [3], [2], [4], [4], [2], [3], [1], [ 2,3], [4], [1], [2,3], [2,3], [1], [4], [2,3]]
sudoku này có 2 giải pháp. Tôi phải viết cả hai. Sau khi giải pháp ban đầu đó đạt được, tôi cần phải thực hiện một thuật toán backtracking, nhưng tôi không biết làm thế nào để làm cho nó.
Suy nghĩ của tôi là viết ra các phần tử cố định vào một danh sách mới có tên là danh sách cố định sẽ thay đổi ô nhiều giải pháp thành [].
Đối với ví dụ được đề cập ở trên, danh sách cố định trông giống như sau: [[1], [3], [2], [4], [4], [2], [3], [1], [ ], [4], [1], [], [], [1], [4], []]
Từ đây tôi có "mẫu", tôi tìm độ dài thấp nhất trong danh sách giải pháp không bằng 1, và tôi thử số thứ nhất có thể của ô này và tôi đặt nó vào danh sách cố định đó. Ở đây tôi có một thuật toán để cập nhật các ô và kiểm tra nếu nó vẫn là một sudoku có thể giải được hay không. Nếu không, tôi không biết làm thế nào để bước lùi lại và thử một cái mới. Tôi biết mã giả của nó và tôi có thể sử dụng nó cho các ngôn ngữ mệnh lệnh nhưng không dùng cho ngôn ngữ. (prolog thực sự đã thực hiện thuật toán backtrack, nhưng erlang không)
Bất kỳ ý tưởng nào?
Bạn vẫn còn quan tâm đến điều này, tôi đã làm một số công việc với điều này ngay bây giờ và có thể giúp bạn nếu bạn muốn. Bạn có thể sử dụng id của tôi ở đây làm địa chỉ thư trên gmail. – rvirding