Bạn có thể xem xét từng nhóm biểu tượng giống hệt nhau được liên kết (và bằng cách liên kết, ý tôi là bạn có thể đi từ biểu tượng này sang biểu tượng khác) một biểu đồ riêng . Đối với mỗi biểu đồ như vậy, áp dụng Tìm kiếm Đầu tiên Độ sâu (DFS) bắt đầu từ mỗi nút trong biểu đồ chưa phải là một phần của đường dẫn dài nhất cho biểu đồ đó . Mỗi khi bạn đi đến ngõ cụt trong khi áp dụng DFS, hãy kiểm tra xem liệu con đường bạn vừa đi qua có dài hơn mức tối đa toàn cầu mà bạn đã tìm thấy cho đến nay không. Nếu có, lưu trữ nó như là con đường dài nhất mới.
Bạn sẽ nhận thấy rằng trong đoạn trước tôi đã đề cập đến việc áp dụng DFS nhiều lần cho mỗi biểu đồ. Một DFS duy nhất chạy trên biểu đồ sẽ không đủ. Hãy xem xét trường hợp cụ thể này:
1
1 1 1
1
1
1
1
Nếu tình cờ trước tiên bạn sẽ chạy DFS trên biểu đồ này ở nút trên cùng, bạn sẽ khám phá đường dẫn dài nhất có thể là đường thẳng đứng, nhưng điều đó sẽ không chính xác. Điều này sẽ xảy ra mỗi khi bạn khởi động thuật toán DFS trong một nút nằm ở đâu đó bên trong đường dẫn kết quả hoặc hoàn toàn không phải là một phần của nó. Những gì bạn cần làm trong ví dụ cụ thể này cũng là bắt đầu một thuật toán DFS từ nút ngoài cùng bên trái trong dòng thứ hai. Điều đó sẽ tìm thấy con đường chính xác. Nói chung, bạn sẽ cần chạy các thuật toán DFS trong mỗi nút hiện không phải là một phần của đường dẫn dài nhất cho biểu đồ đó, như đã nêu ở trên.
Kịch bản trường hợp xấu hơn tuyệt đối cho thuật toán này sẽ là một bảng được lấp đầy hoặc chủ yếu chứa đầy một loại ký hiệu duy nhất, tuy nhiên điều đó khó xảy ra trong trò chơi. Ngoài ra, hãy cẩn thận cách bạn lưu trữ các đường dẫn dài nhất cho mỗi biểu đồ. Nếu bạn không tối ưu hóa bit này, bạn có thể tốt hơn nếu chỉ gọi DFS cho mỗi nút trên sân khấu. Giả sử rằng bạn không làm việc với các bảng rất lớn và tốc độ đó không phải là vấn đề lớn, giải pháp này sẽ đủ nhanh.
Về mặt kỹ thuật, bằng cách chia bảng của bạn thành các biểu đồ riêng biệt, bạn sẽ có nhiều " vấn đề về con đường dài nhất ". Như chúng ta có thể thấy từ ví dụ của bạn, bạn có thể có các chu kỳ trong biểu đồ của mình (ví dụ: có tất cả các biểu tượng ở bên ngoài giai đoạn cùng loại), điều đó có nghĩa là trong vấn đề cụ thể này, bạn cần tìm đường đi dài nhất trong một số đồ thị vô hướng theo chu kỳ, không thể thực hiện được trong thời gian đa thức .
Nếu bạn thấy rằng điều này quá chậm, hãy xem câu trả lời này trên StackOverflow để biết thêm chi tiết về cách tối ưu hóa "Vấn đề đường dẫn dài nhất" riêng lẻ.