Skip to content

Commit aeb7e30

Browse files
authored
Improve performance of bfs functions (#250)
1 parent c3eac7f commit aeb7e30

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/traversals/bfs.jl

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,19 @@ end
4343
function _bfs_parents(g::AbstractGraph{T}, source, neighborfn::Function) where {T}
4444
n = nv(g)
4545
visited = falses(n)
46-
parents = zeros(T, nv(g))
46+
parents = zeros(T, n)
4747
cur_level = Vector{T}()
4848
sizehint!(cur_level, n)
4949
next_level = Vector{T}()
5050
sizehint!(next_level, n)
51+
k = 0
5152
@inbounds for s in source
52-
visited[s] = true
53-
push!(cur_level, s)
54-
parents[s] = s
53+
if !visited[s]
54+
visited[s] = true
55+
push!(cur_level, s)
56+
parents[s] = s
57+
k += 1
58+
end
5559
end
5660
while !isempty(cur_level)
5761
@inbounds for v in cur_level
@@ -60,8 +64,10 @@ function _bfs_parents(g::AbstractGraph{T}, source, neighborfn::Function) where {
6064
push!(next_level, i)
6165
parents[i] = v
6266
visited[i] = true
67+
k += 1
6368
end
6469
end
70+
k == n && return parents
6571
end
6672
empty!(cur_level)
6773
cur_level, next_level = next_level, cur_level
@@ -105,10 +111,14 @@ function gdistances!(g::AbstractGraph{T}, source, vert_level; sort_alg=QuickSort
105111
sizehint!(cur_level, n)
106112
next_level = Vector{T}()
107113
sizehint!(next_level, n)
114+
k = 0
108115
@inbounds for s in source
109-
vert_level[s] = zero(T)
110-
visited[s] = true
111-
push!(cur_level, s)
116+
if !visited[s]
117+
vert_level[s] = zero(T)
118+
visited[s] = true
119+
push!(cur_level, s)
120+
k += 1
121+
end
112122
end
113123
while !isempty(cur_level)
114124
@inbounds for v in cur_level
@@ -117,8 +127,10 @@ function gdistances!(g::AbstractGraph{T}, source, vert_level; sort_alg=QuickSort
117127
push!(next_level, i)
118128
vert_level[i] = n_level
119129
visited[i] = true
130+
k += 1
120131
end
121132
end
133+
k == n && return vert_level
122134
end
123135
n_level += one(T)
124136
empty!(cur_level)

0 commit comments

Comments
 (0)