2011-09-23 21 views
5

Tôi đang tìm một thuật toán để đếm số đường đi qua một nút cụ thể trong một DAG (tương tự như khái niệm 'betweenness'), với các điều kiện sau và các ràng buộc:Đếm số đường đi ngắn nhất thông qua một nút trong DAG

Tôi cần đếm số lượng nút nguồn/đích trong biểu đồ chứ không phải tất cả các nút, tức là cho nút giữa n, tôi muốn biết có bao nhiêu đường đi ngắn nhất khác nhau từ tập hợp các nút S để thiết lập các nút D đi qua n (và khác biệt, ý tôi là mỗi hai đường dẫn có ít nhất một nút không phổ biến)

Các thuật toán bạn có thể đề xuất là gì, xem xét DAG có thể là rất lớn nhưng thưa thớt ở các cạnh và gà mái ưu tiên ce không được trao cho các vòng lặp lồng nhau sâu trên các nút.

Trả lời

3

Bạn có thể sử dụng tìm kiếm rộng đầu tiên cho mỗi cặp nút Src/Dest và xem nút nào trong số đó có nút đã cho của bạn trong đường dẫn. Bạn sẽ phải sửa đổi tìm kiếm một chút như vậy mà một khi bạn đã tìm thấy con đường ngắn nhất của bạn, bạn tiếp tục để trống hàng đợi cho đến khi bạn đạt đến một con đường gây ra bạn để tăng kích thước. Bằng cách này bạn không bị ràng buộc bởi ngẫu nhiên nếu có nhiều đường đi ngắn nhất. Đây chỉ là một lựa chọn với đồ thị không có trọng số, tất nhiên.