enqueue_neighbours Subroutine

private pure subroutine enqueue_neighbours(adjacency, u, label, component, queue, tail)

Label and enqueue every still-unlabelled neighbour of u.

Arguments

Type IntentOptional Attributes Name
type(csr_t), intent(in) :: adjacency

Adjacency to read row u from

integer(kind=default_int), intent(in) :: u

Vertex whose neighbours are being visited

integer(kind=default_int), intent(in) :: label

Component label to assign

integer(kind=default_int), intent(inout) :: component(:)

Component labels, 0 where still unlabelled

integer(kind=default_int), intent(inout) :: queue(:)

Visit queue

integer(kind=default_int), intent(inout) :: tail

Index of the last used slot of queue


Called by

proc~~enqueue_neighbours~~CalledByGraph proc~enqueue_neighbours enqueue_neighbours proc~connected_components connected_components proc~connected_components->proc~enqueue_neighbours

Variables

Type Visibility Attributes Name Initial
integer(kind=default_int), private :: k
integer(kind=default_int), private :: v

Source Code

   pure subroutine enqueue_neighbours(adjacency, u, label, component, queue, tail)
      !! Label and enqueue every still-unlabelled neighbour of `u`.
      type(csr_t), intent(in) :: adjacency
         !! Adjacency to read row `u` from
      integer(default_int), intent(in) :: u
         !! Vertex whose neighbours are being visited
      integer(default_int), intent(in) :: label
         !! Component label to assign
      integer(default_int), intent(inout) :: component(:)
         !! Component labels, 0 where still unlabelled
      integer(default_int), intent(inout) :: queue(:)
         !! Visit queue
      integer(default_int), intent(inout) :: tail
         !! Index of the last used slot of `queue`

      integer(default_int) :: k, v

      do k = adjacency%row_ptr(u), adjacency%row_ptr(u + 1) - 1
         v = adjacency%col_idx(k)
         if (component(v) /= 0) cycle
         component(v) = label
         tail = tail + 1
         queue(tail) = v
      end do
   end subroutine enqueue_neighbours