Giả sử mình có 1 cái đồ thị có hướng. Giờ làm sao để tìm ra một đồ thị con khi có input là:
- Một tập các đỉnh đầu
- Một tập các đỉnh cuối
- Đỉnh đầu là đỉnh không có cạnh nào đi tới nó.
- Đỉnh cuối là đỉnh không có cạnh nào xuất phát từ nó.
Cái này mình nghĩ có thể làm theo kiểu quay lui. Mỗi đỉnh sẽ gán nhãn là UNVISITED, bắt đầu từ đỉnh đầu, đi tiếp đến các đỉnh tiếp theo, để thành VISITED, cứ thế đến khi nào gặp 1 đỉnh cuối. Nếu đỉnh cuối khác tập input thì đặt lại UNVISITED rồi quay ngược lên đỉnh trên nó. Nếu đỉnh trên nó không nối tới đỉnh nào VISITED thì đặt là UNVISITED rồi lại lên tiếp,… => Như thế tất cả các đỉnh có cạnh là VISITED sẽ tạo thành đồ thị mình muốn.
Nhưng mà cách này thì thời gian xử lí sẽ lâu vì phải duyệt trong đồ thị rất nhiều lần, có ai biết được phương pháp nào độ phức tạp thấp mà duyệt cây nhanh hơn có thể bày cho mình được không ạ. Cảm ơn nhiều hiuhiu!!!