Skip to content

Commit 39c62de

Browse files
feat: add the ability to completely remove vertices from BipartiteGraph
1 parent d37b2a8 commit 39c62de

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/bipartite_graph.jl

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -535,13 +535,39 @@ function set_neighbors!(g::BipartiteGraph, i::Integer, new_neighbors)
535535
end
536536
end
537537

538-
function delete_srcs!(g::BipartiteGraph, srcs)
538+
function delete_srcs!(g::BipartiteGraph{I}, srcs; rm_verts = false) where {I}
539539
for s in srcs
540540
set_neighbors!(g, s, ())
541541
end
542+
if rm_verts
543+
old_to_new_idxs = collect(one(I):I(nsrcs(g)))
544+
for s in srcs
545+
old_to_new_idxs[s] = zero(I)
546+
end
547+
offset = zero(I)
548+
for i in eachindex(old_to_new_idxs)
549+
if iszero(old_to_new_idxs[i])
550+
offset += one(I)
551+
continue
552+
end
553+
old_to_new_idxs[i] -= offset
554+
end
555+
556+
if g.badjlist isa AbstractVector
557+
for i in 1:ndsts(g)
558+
for j in eachindex(g.badjlist[i])
559+
g.badjlist[i][j] = old_to_new_idxs[g.badjlist[i][j]]
560+
end
561+
filter!(!iszero, g.badjlist[i])
562+
end
563+
end
564+
deleteat!(g.fadjlist, srcs)
565+
end
542566
g
543567
end
544-
delete_dsts!(g::BipartiteGraph, srcs) = delete_srcs!(invview(g), srcs)
568+
function delete_dsts!(g::BipartiteGraph, srcs; rm_verts = false)
569+
delete_srcs!(invview(g), srcs; rm_verts)
570+
end
545571

546572
###
547573
### Edges iteration

0 commit comments

Comments
 (0)