Re: [問題] 請問一個問題

看板ACMCLUB作者 (bye~)時間18年前 (2005/10/16 00:41), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串11/11 (看更多)
※ 引述《chhsiao (bye~)》之銘言: : 發現我忘了用 s, 所以沒轉文過來 ^^" : --- : ※ 引述《vcore (vcore)》之銘言: : : 請各位大大幫忙~ : : 問題如下: : : 有一個矩陣 4*4矩陣 : : 例如 : : 15 0 0 5 : : 0 50 20 30 : : 35 5 0 15 : : 0 65 50 70 : : 請求出最少線段覆蓋 全部的"0" : : ( 線段是以覆蓋整個row或整個col ) : : 例如 : : 15-0-35-0 這條線段覆蓋了2個0 : : 15-0-0-5 覆蓋2個0 : : 35-5-0-15 覆蓋一個0 : : 所以上面這個例子 最少要用3個線段覆蓋全部的0 : : 給定N*N矩陣 : : 求出最少需幾條線段覆蓋全部的"0" : : N <= 100 : : 請問各位這題要用什麼演算法? : : 謝謝! : 這題可以 reduce 成 bipartite graph 的 vertex cover : (reduce 的方法就如 windows2k 所說) : 而有個定理說 bipartite graph 的 maximum size of a matching : 等於 minimum size of a vertex cover : 不過我還在讀, 所以還不會 :p 想出來了. 先找一個 maximum matching M, 令 Q <- {}, 任取一個 unmatched vertex x (i.e. x is not in M), 然後把所有 x 連到的點加到 Q 裡面, (這些點一定在 M 裡面, why? :p) 並把這些點及它們在 M 裡面的對應點從 M 之中去掉, 這樣一來又會產生一些 unmatched vertices. 重複這個步驟直到沒有 unmatched vertex, 此時把剩餘的 M 裡面其中一個 bipart 加到 Q 中. Q 就是一組 minimum vertex cover. --- 書上的證明是給 vertex cover => matching. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.52
文章代碼(AID): #13KJ5HE5 (ACMCLUB)
討論串 (同標題文章)
文章代碼(AID): #13KJ5HE5 (ACMCLUB)