Tôi đang tìm một thuật toán nhận như là đầu vào một đỉnh , và tìm thấy con đường đi ngắn nhất từ đến tất cả các đỉnh trong đồ thị bổ sung (vô hướng). Thuật toán sẽ chạy trong thời gian , trong đó là số cạnh trong biểu đồ gốc (không phải biểu đồ bổ sung).
Nếu là đồ thị, đồ thị bổ sung được xác định là đồ thị sau: là một cạnh trong đồ thị bổ sung, nếu và chỉ khi nó không phải là cạnh trong đồ thị ban đầu. Nói cách khác, chúng tôi xóa tất cả các cạnh hiện có và thêm tất cả các cạnh bị thiếu khỏi biểu đồ ban đầu.
Vì vậy, trước tiên tôi nghĩ đến việc "xây dựng" biểu đồ bổ sung (thay thế các đỉnh trong danh sách kề với các đỉnh không xuất hiện ở đó), sau đó chạy BFS trên danh sách mới, nhưng tất nhiên điều đó có nghĩa là thời gian chạy sẽ dựa trên các cạnh trong biểu đồ bổ sung, không phải là bản gốc.
Tất nhiên tôi cũng nhận thấy rằng sau khi chạy BFS trên biểu đồ gốc, bất kỳ đỉnh nào có khoảng cách từ lớn hơn 1 (trong biểu đồ gốc) sẽ trở thành 1 trong biểu đồ bổ sung (vì nếu chúng không có hàng xóm trong đồ thị ban đầu, chúng là hàng xóm trong đồ thị bổ sung). Nhưng tôi không thể có được thuật toán để tiếp tục theo một số quy tắc cụ thể về việc khi nào nên cập nhật khoảng cách và làm gì. Bất kỳ đề xuất?