以下是此算法的伪代码(source):
/*
G = G1 ∪ G2 ∪ {NIL}
where G1 and G2 are partition of graph and NIL is a special null vertex
*/
function BFS ()
for v in G1
if Pair_G1[v] == NIL
Dist[v] = 0
Enqueue(Q,v)
else
Dist[v] = ∞
Dist[NIL] = ∞
while Empty(Q) == false
v = Dequeue(Q)
if Dist[v] < Dist[NIL]
for each u in Adj[v]
if Dist[ Pair_G2[u] ] == ∞
Dist[ Pair_G2[u] ] = Dist[v] + 1
Enqueue(Q,Pair_G2[u])
return Dist[NIL] != ∞
function DFS (v)
if v != NIL
for each u in Adj[v]
if Dist[ Pair_G2[u] ] == Dist[v] + 1
if DFS(Pair_G2[u]) == true
Pair_G2[u] = v
Pair_G1[v] = u
return true
Dist[v] = ∞
return false
return true
function Hopcroft-Karp
for each v in G
Pair_G1[v] = NIL
Pair_G2[v] = NIL
matching = 0
while BFS() == true
for each v in G1
if Pair_G1[v] == NIL
if DFS(v) == true
matching = matching + 1
return matching
我正在尝试决定每个变量应该是什么。代码中的G1
和G2
似乎与G
的大小相同,但它们已初始化为NIL
。但是,在BFS算法中,究竟是什么Adj[v]
?在典型的图表场景中,这会是什么类似的?
答案 0 :(得分:0)
Adj[v]
表示v
的邻接列表,即其相邻顶点的列表。 G1
和G2
是图表的分区。由于Hopcroft-Kapr算法用于二分图,因此解决方案表明图形分为两个分区,即G1
和G2
。