首先,最小路徑覆蓋=總節點數-最大匹配數。
所謂最小路徑覆蓋,是指在一個有向圖中,找出最少的幾條路徑,用它們來覆蓋全圖
這裏說的值得注意的地方,如果有向圖的邊有相交的情況,那麼就不能簡單的對原圖求二分匹配了
舉個例子,假設有圖:1->2 2->5 2->3 4->2,事實上,這其實就是兩條邊:1->5 4->3 ,節點2只是他們的一個交點
如果只是簡單的在原圖的基礎上求二分匹配,那麼得到的匹配答案是2,最小路徑覆蓋答案便是5-2=3。
可是隨便一看都能看看出端倪,這個圖中,只需要兩個點便可以探索完整個地圖,這裏最小路徑覆蓋數明顯是2。
問題究竟出在哪裏呢?其實就和這個交點2有關。既然邊有相交,那麼他們的連通性也應該連通下去。
解決的辦法是對原圖進行一次閉包傳遞(也就是flody),於是便增加了四條邊:1->3 1->5 4->3 4->5
這時再求最大匹配數,匹配答案便是3,最小路徑覆蓋值爲2,這是正確答案!